如何在C#中更新querystring
本文关键字:更新 querystring | 更新日期: 2023-09-27 18:28:19
在url的某个地方有一个&sortBy=6。如何将其更新为&sortBy=4或&sortBy=2点击按钮?我需要编写自定义字符串函数来创建正确的重定向url吗?
如果我只需要附加一个查询字符串变量,我会做
string completeUrl = HttpContext.Current.Request.Url.AbsoluteUri + "&" + ...
Response.Redirect(completeUrl);
但我想做的是修改一个现有的querystring变量。
要修改现有的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的查询字符串,然后对完整Url执行string replace,如下所示:
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);
}
如果您真的想要这样做,您需要重定向到新的同一页面,该页面的查询字符串已更改,并且已经有人回答了。这将再次加载您的页面,再次加载页面只是为了更改查询字符串,这不是一个好的做法。
但你为什么需要这个?
如果您想将sortBy的值从6更改为4,以便在应用程序中的任何地方使用,我的建议是将查询字符串的值存储到某个变量或视图状态中,并在任何地方使用该视图状态。
例如
在Page_Load中,您可以编写
if (!IsPostBack)
{
ViewState["SortBy"] = Request.QueryString["sortBy"];
}
在其他任何地方(甚至在回发后),您都可以使用ViewState["SortBy"]
基于Ahmad解决方案,我创建了以下方法,通常可以使用
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"));
您需要重定向到一个新的URL。如果在重定向到服务器之前需要在服务器上做一些工作,则需要在代码中使用Response.RRedirect(…)。如果不需要在服务器上进行操作,只需使用HyperLink并提前渲染即可。
如果你问关于构建实际URL的问题,我不知道有任何内置函数可以完成这项工作。您可以为Paths和QueryString参数使用常量,以避免在代码中重复它们。
UriBuilder可以帮助您构建URL,但不能帮助您构建查询字符串
您可以在客户端使用一些javascript来构建查询字符串,并使用windows.open.重定向页面
否则,您可以在服务器端使用Response.RRedirect或Server.Transfer。
/// <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
的唯一方法是使用新的QueryString:重定向到同一页面
Response.Redirect("YourPage.aspx?&sortBy=4")
http://msdn.microsoft.com/en-us/library/a8wa7sdt(v=vs.100).aspx
我认为您可以在服务器端代码中以以下方式替换查询字符串。
NameValueCollection filtered = new NameValueCollection(request.QueryString);
filtered.Remove("SortBy");
filtered.Add("SortBy","4");
查询字符串被传递到服务器。您可以随心所欲地将查询字符串作为字符串处理,但在页面准备好再次读取(即发送回服务器)之前,它不会做任何事情。因此,如果你问如何处理查询字符串的值,你只需访问它Request.QueryString["key"]。如果你想让服务器考虑查询字符串中的"更改",你只需要用新值有效地重新加载页面。因此,例如,再次构造url page.aspx?id=30
,并将其传递到重定向方法中。