ページ遷移の管理

public static class Navigator
{
    /// <summary>
    /// 既定のページに遷移します。
    /// </summary>
    public static void NavigateDefaultAspx()
    {
        Navigate("~/Default.aspx");
    }

    /// <summary>
    /// ほげページに遷移します。
    /// </summary>
    /// <param name="name">ほげ名称。</param>
    public static void NavigateHogeAspx(string name)
    {
        Navigate("~/Hoge.aspx", new KeyValuePair<string, string>("name", name));
    }

    /// <summary>
    /// 指定したキー/値ペアをクエリー文字列として、指定した URL へ遷移します。
    /// </summary>
    /// <param name="baseUrl">遷移先 URL。</param>
    /// <param name="queries">クエリー文字列に変換するキー/値ペア</param>
    private static void Navigate(string baseUrl, params KeyValuePair<string, string>[] queries)
    {
        string url = NavigateHelper.CreateUrl(baseUrl, queries);
        HttpContext.Current.Response.Redirect(url, false);
    }
}
/// <summary>
/// ページ遷移を補助するメソッドを提供します。
/// </summary>
public static class NavigateHelper
{
    /// <summary>
    /// 指定したキー/値ペアをクエリー文字列に変換し、指定した URL の末尾に付加します。
    /// </summary>
    /// <param name="baseUrl">基本の URL。</param>
    /// <param name="queries">クエリー文字列に変換するキー/値ペア</param>
    /// <returns>クエリー文字列を付加した URL。</returns>
    public static string CreateUrl(string baseUrl, params KeyValuePair<string, string>[] queries)
    {
        StringBuilder urlBuilder = new StringBuilder();
        urlBuilder.Append(baseUrl);
        bool firstQuery = true;
        foreach (KeyValuePair<string, string> query in queries)
        {
            urlBuilder.Append((firstQuery ? "?" : "&"));
            urlBuilder.AppendFormat("{0}={1}", HttpUtility.UrlEncode(query.Key), HttpUtility.UrlEncode(query.Value));
            firstQuery = false;
        }
        return urlBuilder.ToString();
    }
}