1

複数のクエリ パラメータを含むページ (最近では検索結果ページ) があり、URL で 1 つ以上のクエリ パラメータを変更して同じページへのリンクを作成する必要があったケースがいくつかありました。これは非常に一般的な使用例のように思えるので、それを行うための簡単な組み込みの方法が必要であると私は感じています。

現在、私が書いた関数を使用しています。これは、パラメーターと値の辞書を取り、それらを からのパラメーターと値とマージしますRequest.QueryString。値を指定したパラメーターnullは削除されます。それは機能しますが、私はより簡単な方法を受け入れています。

4

2 に答える 2

1

私が今使っている機能:

public string ThisPageWithParams(IDictionary<string, string> newParameters)
{
    string url = Request.Url.AbsolutePath + "?";

    var parameters = new Dictionary<string, string>();
    foreach (string k in Request.QueryString)
    {
        parameters[k] = Request.QueryString[k];
    }
    foreach (var kv in newParameters)
    {
        if (newParameters[kv.Key] == null)
        {
            parameters.Remove(kv.Key);
        }
        else
        {
            parameters[kv.Key] = kv.Value;
        }
    }

    url += string.Join("&amp;", parameters.Select(kv => Server.UrlEncode(kv.Key) + "=" + Server.UrlEncode(kv.Value)));

    return url;
}
于 2012-06-12T17:38:27.577 に答える
1

私が提案したいマイナーな改善:

//...
{
    UriBuilder ub = new UriBuilder(Request.Url);

    //...

    ub.Query = string.Join("&", parameters.Select(kv => string.Format("{0}={1}", Server.UrlEncode(kv.Key), Server.UrlEncode(kv.Value))));

    return ub.ToString();
}

編集

実際には、戻り値もUri型である必要がありますが、重大な変更を導入したくありませんでした。

于 2012-06-12T18:17:40.017 に答える