加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 18:34:03 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET页面,它在查询字符串中需要一些参数: search.aspx?q=123source=WebSearch 这将显示搜索结果的第一页。现在在该页面的呈现中,我想显示一组链接,允许用户跳转到搜索结果中的不同页面。我可以通过追加 page = 1或 page = 2等来做到这一点。
我有一个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类。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读