asp.net – 更改单个URL查询字符串值

前端之家收集整理的这篇文章主要介绍了asp.net – 更改单个URL查询字符串值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ASP.NET页面,它在查询字符串中需要一些参数:
search.aspx?q=123&source=WebSearch

这将显示搜索结果的第一页。现在在该页面的呈现中,我想显示一组链接,允许用户跳转搜索结果中的不同页面。我可以通过追加& page = 1或& page = 2等来做到这一点。

它变得复杂的是,我想保留原始页面中的输入查询字符串,除了我想要更改的每个参数。在其他组件使用的url中可能还有其他参数,我试图替换的值可能已经被定义了,也可能不会被定义:

search.aspx?q=123&source=WebSearch&page=1&Theme=Blue

在这种情况下,要生成下一页结果的链接,我想将page = 1更改为page = 2,而其余的查询字符串不变。

有没有内建的方法来做到这一点,还是需要手动执行所有的字符串解析/重组?

解决方法

您不能直接修改 QueryString,因为它是唯读的。您将需要获取值,修改它们,然后将它们放在一起。尝试这个:
var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
nameValues.Set("page","2");
string url = Request.Url.AbsolutePath;
string updatedQueryString = "?" + nameValues.ToString();
Response.Redirect(url + updatedQueryString);

ParseQueryString method返回一个NameValueCollection(实际上它真的返回一个编码结果的HttpValueCollection,as I mention in an answer to another question)。然后可以使用Set方法来更新值。您还可以使用Add方法添加新的方法,或者使用Remove删除一个值。最后,调用NameValueCollection上的ToString()返回name1 = value1& name2 = value2 querystring ready格式中的名称值对。一旦你把它附加到URL并重定向

或者,您可以使用索引器添加新密钥或修改现有密钥:

nameValues["temp"] = "hello!"; // add "temp" if it didn't exist
nameValues["temp"] = "hello,world!"; // overwrite "temp"
nameValues.Remove("temp"); // can't remove via indexer

您可能需要添加一个使用System.Collections.Specialized;以使用NameValueCollection类。

原文链接:https://www.f2er.com/aspnet/253386.html

猜你在找的asp.Net相关文章