1

我有几个案例,其中我有一个包含多个查询参数的页面 - 最近是一个搜索结果页面 - 并且需要创建指向同一页面的链接,并在 URL 中更改了一个或多个查询参数。这似乎是一个常见的用例,我觉得好像必须有一些简单的内置方法来做这件事。

现在,我正在使用我编写的一个函数,它接收参数和值的字典,并将它们与来自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 回答