如何在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变量。

如何在C#中更新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。

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的唯一方法是使用新的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,并将其传递到重定向方法中。