如何在C#中更新查询字符串?

时间:2012-03-19 14:12:07

标签: c# asp.net query-string

网址中有一个& sortBy = 6。如何在单击按钮时将其更新为& sortBy = 4或& sortBy = 2?我是否需要编写自定义字符串函数来创建正确的重定向网址?

如果我只需要附加一个查询字符串变量,我会做

string completeUrl = HttpContext.Current.Request.Url.AbsoluteUri + "&" + ...
Response.Redirect(completeUrl);

但我想要做的是修改现有的querystring变量。

11 个答案:

答案 0 :(得分:117)

要修改现有的QueryString值,请使用以下方法:

var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
nameValues.Set("sortBy", "4");
string url = Request.Url.AbsolutePath;
Response.Redirect(url + "?" + nameValues); // ToString() is called implicitly

我在another response中详细介绍。

答案 1 :(得分:7)

检索 sortby 的查询字符串,然后在完整的Url上执行字符串替换,如下所示:

string sUrl = *retrieve the required complete url*
string sCurrentValue = Request.QueryString["sortby"];
sUrl = sUrl.Replace("&sortby=" + sCurrentValue, "&sortby=" + newvalue);

让我知道它是怎么回事:))

祝你好运

答案 2 :(得分:5)

    private void UpdateQueryString(string queryString, string value)
    {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        isreadonly.SetValue(this.Request.QueryString, false, null);
        this.Request.QueryString.Set(queryString, value);
        isreadonly.SetValue(this.Request.QueryString, true, null);
    }

答案 3 :(得分:2)

如果你真的想要这个,你需要重新定向到更新查询字符串的新同一页面,因为已经有人回答了。这将再次加载您的页面,再次加载页面只是为了更改查询字符串,这不是一个好的做法。

但你为什么需要这个?

如果要将sortBy的值从6更改为4以在应用程序中的任何位置使用,我的建议是将查询字符串的值存储到某个变量或视图状态,并在任何地方使用该视图状态。

例如

在Page_Load中你可以写

if (!IsPostBack)
{
  ViewState["SortBy"] = Request.QueryString["sortBy"];
}

和其他地方(甚至在回发后)你可以使用ViewState [" SortBy"]

答案 4 :(得分:1)

基于Ahmad Solution,我创建了以下可以常用的方法

private string ModifyQueryStringValue(string p_Name, string p_NewValue)
{

    var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
    nameValues.Set(p_Name, p_NewValue);
    string url = Request.Url.AbsolutePath;
    string updatedQueryString = "?" + nameValues.ToString();
    return url + updatedQueryString;
}

然后我们如下

Response.Redirect(ModifyQueryStringValue("SortBy","4"));

答案 5 :(得分:0)

您需要重定向到新网址。如果您需要在重定向之前在服务器上执行某些操作,则需要在代码中使用Response.Redirect(...)。如果您不需要在服务器上工作,只需使用HyperLink并提前渲染它。

如果您要求构建实际的URL,我不知道任何可以完成这项工作的内置函数。您可以对Paths和QueryString参数使用常量,以避免在代码中重复这些常量。

UriBuilder可以帮助您构建网址,但不能帮助您构建查询字符串

答案 6 :(得分:0)

您必须更改QueryString的唯一方法是使用新的QueryString重定向到同一页面:

Response.Redirect("YourPage.aspx?&sortBy=4")

http://msdn.microsoft.com/en-us/library/a8wa7sdt(v=vs.100).aspx

答案 7 :(得分:0)

您可以使用一些javascript来客户端构建查询字符串并使用windows.open重定向页面。

否则,您可以在服务器端使用Response.Redirect或Server.Transfer。

答案 8 :(得分:0)

SolrNet有一些非常有用的Url扩展方法。 http://code.google.com/p/solrnet/source/browse/trunk/SampleSolrApp/Helpers/UrlHelperExtensions.cs?r=512

    /// <summary>
    /// Sets/changes an url's query string parameter.
    /// </summary>
    /// <param name="helper"></param>
    /// <param name="url">URL to process</param>
    /// <param name="key">Query string parameter key to set/change</param>
    /// <param name="value">Query string parameter value</param>
    /// <returns>Resulting URL</returns>
    public static string SetParameter(this UrlHelper helper, string url, string key, string value) {
        return helper.SetParameters(url, new Dictionary<string, object> {
            {key, value}
        });
    }

答案 9 :(得分:0)

我认为您可以在服务器端代码上以下列方式替换查询字符串。

NameValueCollection filtered = new NameValueCollection(request.QueryString);

filtered.Remove("SortBy");
filtered.Add("SortBy","4");

答案 10 :(得分:0)

将查询字符串传递给服务器。您可以将查询字符串作为字符串处理 - 但是在页面准备再次读取它(即发送回服务器)之前,它不会执行任何操作。因此,如果您正在询问如何处理查询字符串的值,您只需访问它Request.QueryString [“key”]。如果您希望服务器考虑查询字符串中的“更改”,则只需要使用新值有效地重新加载页面。因此,再次构建网址page.aspx?id=30,并将其传递给重定向方法。