当用户访问我的页面_mypage.aspx?querystring_
时,我不希望查询字符串保留在地址栏中,因为如果他们刷新,我不想重复依赖该值的操作。 />
我试图从查询字符串中获取值并将其发布到同一页面,但它提供了几乎相同的效果:刷新将重新发布。
我试图将值重定向到哈希值(#),但哈希值不会返回服务器。
我有什么选择?如何在没有帖子的情况下重定向到另一个或同一页面,但保留数据?
答案 0 :(得分:4)
答案 1 :(得分: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页面),没有数据被更改,他们的确认消息保持不变。
答案 2 :(得分:2)
在 ASP.NET 中,您可以使用Session,如@ gunr2171的回答中所述。
在 ASP.NET MVC 中,您可以使用TempData。
要支持最终页面上的多个屏幕刷新,您可以使用TempData.Keep()
方法:
TempData.Keep("TempDataKeyValue1");
SomeModelClass model = (SomeModelClass)TempData["TempDataKeyValue1"];
答案 3 :(得分:1)
如果以某种方式适用于您的后续操作,我会在您使用查询字符串获取请求时执行操作,最后您将重定向到不带查询字符串的URL(相同)(Post-Redirect-Get)。
但是,您也可以使用 Cookie :
刷新页面将不再有cookie。