如何重定向到另一个页面传递数据但没有c#中的帖子

时间:2013-04-19 19:24:44

标签: c# asp.net post

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

它存储为对象,因此您必须适当地进行转换。

答案 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)

使用Post/Redirect/Get模式

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

  1. 服务器接收查询字符串网址
  2. 服务器向没有查询字符串的网址发送重定向响应,添加包含查询字符串的cookie
  3. 服务器接收器URL没有查询字符串,但带有cookie
  4. 服务器根据cookie值执行操作,删除cookie并发送显示操作结果的最终响应。
  5. 刷新页面将不再有cookie。