当用户访问我的页面时,_mypage.aspx?querystring_
我不希望查询字符串保留在地址栏中,因为如果他们刷新,我不想重复依赖该值的操作。
我试图从查询字符串中获取值并将其发布到同一页面,但它给出的效果几乎相同:刷新将重新发布。
我试图重定向将值添加到哈希 (#),但哈希值不会返回到服务器。
我有哪些选择?如何在没有帖子但保留数据的情况下重定向到另一个或同一页面?
如果您在同一个网站内,您可以使用它Session
来存储数据。
HttpContext.Current.Session["asdf"] = someObject;
它被存储为一个对象,因此您必须适当地转换它。
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 页面),则不会更改任何数据,并且他们的确认消息会保留相同。
使用发布/重定向/获取模式
在ASP.NET中,您可以使用 Session,如@gunr2171 的回答中所述。
在ASP.NET MVC中,您可以使用 TempData。
要在最终页面支持多次屏幕刷新,可以使用以下TempData.Keep()
方法:
TempData.Keep("TempDataKeyValue1");
SomeModelClass model = (SomeModelClass)TempData["TempDataKeyValue1"];
如果以某种方式适用于您之后的内容,我会在您使用查询字符串获取请求时执行该操作,最后您重定向到没有查询字符串的 url(相同)(Post-Redirect-Get)。
但是,您也可以使用cookie:
页面的刷新将不再有 cookie。