3

我正在寻找一种方法来摆脱页面的查询字符串并重定向到自身,但以某种方式保留查询字符串数据。示例: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: 保留参数,但浏览器的 URL 保持不变。

  • 动态创建一个客户端表单并提交onload:工作,查询字符串消失了,参数可以通过 Request.Form 访问,但在浏览器中创建一个历史条目。

我目前唯一能想到的是将参数存储在会话中,然后重定向,然后从那里获取它们。但也许还有另一种解决方案?

4

2 回答 2

2

正如皮特所提到的,您可以将查询字符串参数保存在 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"];
...
于 2010-08-19T13:31:50.543 回答
0

在不深入了解为什么要这样做的情况下,最好的办法是将参数存储在会话状态中。会话状态应尽量少用,因为它会导致应用程序不可靠。例如,如果您的用户存储了一个书签,或者在会话超时后点击了刷新,会发生什么?由于这些原因,我建议不要使用这种方法。

您可以考虑使用 URL 重写来使您需要的参数看起来更友好,例如:http ://www.test.de/somepage/abc

于 2010-08-19T13:01:31.680 回答