我正在寻找一种方法来摆脱页面的查询字符串并重定向到自身,但以某种方式保存查询字符串数据。
示例:http://www.test.de/somepage.aspx?id=abc
应重定向到http://www.test.de/somepage.aspx
。仍然,在重定向之后,我希望能够获取最初传递的参数。我不希望在浏览器的历史记录中有http://www.test.de/somepage.aspx?id=abc
。
到目前为止我尝试了什么:
Response.Redirect()
:在没有创建浏览器历史记录的情况下进行正确的重定向,但我无法保留参数。
Server.Transfer
:保留参数,但浏览器的网址保持不变。
动态创建客户端表单并在onload
中提交:工作,查询字符串消失,参数可通过Request.Form访问,但在浏览器中创建历史记录条目。
我目前唯一能想到的是将参数存储在会话中,然后重定向,然后从那里获取它们。但也许还有另一种解决方案?
答案 0 :(得分:2)
正如Pete所说,您可以在Session中保存查询字符串参数,然后调用Response.Redirect重定向到第二页
Session["id"] = Request["id"];
Session["param2"] = Request["param2"];
Session["param3"] = Request["param3"];
....
Response.Redirect(sameurl);
在页面的第二次加载中检查查询字符串值是否消失。如果是,则不是从查询字符串中读取值,而是从会话中读取值。
id = Session["id"];
param2 = Session["param2"];
param3 = Session["param3"];
...
答案 1 :(得分:0)
如果不想了解为什么要这样做,最好的办法是将参数存储在会话状态中。会话状态应尽可能少地使用,因为它会导致不可靠的应用程序。例如。如果您的用户存储书签会发生什么,或者在会话超时后点击刷新?出于这些原因,我建议不要采用这种方法。
您可以考虑使用网址重写来使您需要的参数看起来更友好,例如:http://www.test.de/somepage/abc