如何在C#中更新查询string?

在url的某处有一个&sortBy = 6。 如何在点击button时将其更新为&sortBy = 4或&sortBy = 2? 我是否需要编写自定义string函数来创build正确的redirecturl?

如果我只是需要附加一个查询stringvariables,我会做的

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

但是我想要做的是修改现有的查询stringvariables。

要修改现有的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 

我在另一个回应中进一步详细说明。

检索sortby的查询string,然后在完整的Url上执行stringreplace ,如下所示:

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

让我知道事情的后续 :)

祝你好运

  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); } 

如果你真的想要这个,你需要redirect到新的相同的页面与更改后的查询string已经被人们回答。 这将再次加载您的页面,再次加载页面只是为了改变查询string,这是不好的做法。

但为什么你需要这个?

如果要将sortBy的值从6更改为4,以便在应用程序中随处使用,那么我的build议是将查询string的值存储到某个variables或视图状态中,并随处使用该视图状态。

例如

在Page_Load中你可以写

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

和其他地方(即使在回发之后),你可以使用ViewState [“SortBy”]

基于艾哈迈德解决scheme我已经创build了以下可以普遍使用的方法

 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")); 

您需要redirect到一个新的URL。 如果您需要在redirect之前在服务器上做一些工作,则需要在代码中使用Response.Redirect(…)。 如果你不需要在服务器上工作,只需使用HyperLink并提前渲染即可。

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

UriBuilder可以帮助您构buildURL而不是查询string

你可以用javascript来build立查询string并使用windows.openredirect页面。

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

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} }); } 

你必须改变QueryString的唯一方法是用新的QueryStringredirect到同一页面:

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

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

我认为你可以在你的服务器端代码中以下列方式执行查询string的replace。

 NameValueCollection filtered = new NameValueCollection(request.QueryString); filtered.Remove("SortBy"); filtered.Add("SortBy","4"); 

查询string被传递给服务器。 你可以将查询string作为一个string处理,但是在页面准备再次读取(即发送回服务器)之前,它不会执行任何操作。 所以,如果你问如何处理查询string的值,你只需简单地访问它Request.QueryString [“key”]。 如果您希望查询string中的“更改”被服务器考虑,则只需要使用新值有效地重新加载页面即可。 所以再次构造一个url,例如page.aspx?id=30 ,并将其传递给一个redirect方法。