2

当用户访问我的页面时,_mypage.aspx?querystring_我不希望查询字符串保留在地址栏中,因为如果他们刷新,我不想重复依赖该值的操作。
我试图从查询字符串中获取值并将其发布到同一页面,但它给出的效果几乎相同:刷新将重新发布。

我试图重定向将值添加到哈希 (#),但哈希值不会返回到服务器。

我有哪些选择?如何在没有帖子但保留数据的情况下重定向到另一个或同一页面?

4

4 回答 4

4

如果您在同一个网站内,您可以使用它Session来存储数据。

HttpContext.Current.Session["asdf"] = someObject;

它被存储为一个对象,因此您必须适当地转换它。

于 2013-04-19T19:28:42.997 回答
2

Session 是一种常用的机制,用于在 Querystring 或 POST 变量之外“传递”值。

Session["test"] = "Test word";
string test = (string)Session["test"];

但是,我会告诉你,如果你想要最好的方式来处理这种情况,你应该研究 POST-REDIRECT-GET 模式。http://en.wikipedia.org/wiki/Post/Redirect/Get

基本上,您更新数据的主要操作是通过 POST 处理的。如果成功,然后您将重定向到 GET,其中包含您的查询字符串参数(例如“updated=True”或其他任何内容。

这样做时,用户无法意外或有意重新触发实际的数据保存操作,因为如果他们重新加载他们登陆的页面(GET 页面),则不会更改任何数据,并且他们的确认消息会保留相同。

于 2013-04-19T19:31:12.943 回答
2

使用发布/重定向/获取模式

ASP.NET中,您可以使用 Session,如@gunr2171 的回答中所述。

ASP.NET MVC中,您可以使用 TempData。

要在最终页面支持多次屏幕刷新,可以使用以下TempData.Keep()方法:

TempData.Keep("TempDataKeyValue1");
SomeModelClass model = (SomeModelClass)TempData["TempDataKeyValue1"];
于 2013-04-19T19:32:37.350 回答
1

如果以某种方式适用于您之后的内容,我会在您使用查询字符串获取请求时执行该操作,最后您重定向到没有查询字符串的 url(相同)(Post-Redirect-Get)。

但是,您也可以使用cookie

  1. 服务器接收查询字符串 url
  2. 服务器向不带查询字符串的 url 发送重定向响应,添加包含查询字符串的 cookie
  3. 服务器接收不带查询字符串但带有 cookie 的 URL
  4. 服务器根据 cookie-value 执行操作,删除 cookie 并发送显示操作结果的最终响应。

页面的刷新将不再有 cookie。

于 2013-04-19T19:36:24.273 回答