为什么Request.QueryString只读?

Sku*_*uli 5 asp.net request.querystring

我以为你不能在没有重定向的情况下更改服务器上的QueryString.

但是这段代码对我有效:

Request.QueryString编辑

我很惊讶.

以下是我对此的疑问:

  1. 为什么Request.QueryString只读?
  2. 为什么这个代码/黑客工作*?
  3. 如果您在完成编辑后立即更改为只读,包括错误错误或意外行为,以及维护和理解代码,那么它的安全性如何?
  4. 如果您只使用PageLoad和OnPageRender,那么在事件周期中最有意义的是进行疯狂的编辑?

*更多细节:

我有一个页面,其中包含分组到选项卡的项目.每个选项卡都是一个asp:LinkBut​​ton

我希望能够直接链接到特定选项卡.我使用QueryString参数'tab = tabName'来做到这一点.有用.但是当我单击一个新选项卡时,查询字符串仍然在Url中,因此Querystring中指定的选项卡被激活,而不是我单击的选项卡.

通过使用Request.QueryString编辑,这不会发生.然后我的解决方案"有效".

提前致谢.

Sti*_*gar 10

那么QueryString属性是只读的,因为它不能在单个请求上更改.显然,浏览器只发送一个只有一个字符串的请求,因此只创建一个集合.黑客使用反射(即操纵代码和内存)来改变你无法正常改变的东西.这个hack打破了QueryString属性的封装和设计.你不应该使用它.从设计的角度来看,没有任何意义.您的查询不会更改,所以为什么要更改代表它的对象?只有浏览器才能发送新的查询字符串,因此您基本上可以使用自己的代码来了解浏览器发送的内容.

如果您希望选项卡使用URL,请使用超链接而不是LinkBut​​ton.