在URL中有一个&sortBy=6。我如何在点击按钮时将其更新为&sortBy=4或&sortBy=2?我需要编写自定义字符串函数来创建正确的重定向URL吗?
如果我只需要添加一个查询字符串变量,我会这样做:
string completeUrl = HttpContext.Current.Request.Url.AbsoluteUri + "&" + ...
Response.Redirect(completeUrl);
但是我想做的是修改一个现有的查询字符串变量。
在URL中有一个&sortBy=6。我如何在点击按钮时将其更新为&sortBy=4或&sortBy=2?我需要编写自定义字符串函数来创建正确的重定向URL吗?
如果我只需要添加一个查询字符串变量,我会这样做:
string completeUrl = HttpContext.Current.Request.Url.AbsoluteUri + "&" + ...
Response.Redirect(completeUrl);
但是我想做的是修改一个现有的查询字符串变量。
要修改现有的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 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);
}
if (!IsPostBack)
{
ViewState["SortBy"] = Request.QueryString["sortBy"];
}
无论何时(即使在postback之后),您都可以使用ViewState["SortBy"]来访问该值。
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"));
你唯一可以改变QueryString
的方法是通过重定向到带有新QueryString
的同一页面:
Response.Redirect("YourPage.aspx?&sortBy=4")
http://msdn.microsoft.com/en-us/library/a8wa7sdt(v=vs.100).aspx
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}
});
}
我认为你可以在服务器端代码中以以下方式执行查询字符串的替换。
NameValueCollection filtered = new NameValueCollection(request.QueryString);
filtered.Remove("SortBy");
filtered.Add("SortBy","4");
您需要重定向到一个新的URL。如果您需要在重定向之前在服务器上进行一些工作,则需要在代码中使用Response.Redirect(...)。如果您不需要在服务器上进行任何工作,只需使用HyperLink并提前呈现即可。
如果您正在询问如何构建实际的URL,则我不知道是否有任何内置函数可以完成此任务。您可以使用常量来代替路径和QueryString参数,以避免在代码中重复使用它们。
UriBuilder可以帮助您构建URL,但无法构建查询字符串。
您可以使用一些 JavaScript 在客户端构建查询字符串并使用 windows.open 重定向页面。
否则,您可以在服务器端使用 Response.Redirect 或 Server.Transfer。