在ASP.net中重定向后获取后如何维护表单状态?

时间:2012-06-27 14:55:24

标签: asp.net post-redirect-get

想象一下带有表单输入的页面:

  

搜索条件: crackers

     
     

来自: ian@stackoverflow.com
  致: list@stackoverflow.com
  主题:如何用PRG维护表单状态?
  消息:想象一下带有表单输入的页面:
   
   
   
   
   
  

     

发送

用户点击发送后,服务器将指示客户端Redirect作为Post-Redirect-Get pattern的一部分。

POST /mail/u/compose

HTTP/1.1 303 See Other
Location: https://stackoverflow.com/mail/u/compose

客户端将发布新页面的GET。问题是现有表格的某些元素丢失了:

  

搜索条件:

当有一些下拉菜单和复选框时会变得更糟。

如果viewstate不存在,我如何在ASP.net中使用Post-Redirect-Get来维护表单状态。


奖金阅读

2 个答案:

答案 0 :(得分:1)

我会在Session中存储必要的数据(我只会将其用于更大量的数据 - 并注意过时的数据错误),或者在重定向中的查询字符串上传递值(这不太容易错误,并可能更好地适用于少量数据)。

它不适合您的模式,但Server.Transfer也可能有用。

答案 1 :(得分:1)

如果搜索条件值应该在系统中的许多不同页面上持续存在(换句话说,在整个用户的会话中),它听起来像是存储在会话中的候选者。或者,如果它应该在多个会话中持续存在(即,下次用户登录时,它会记住上次使用的搜索条件),则需要将其保留在某个更永久的位置。

我不知道ASP.NET中的任何行为类似于MVC的“临时”空间,其中值在第一次读取时自动清理。当然,包装Session的辅助类(或便利函数)可以执行那种“只读”功能。

最后,您可以在重定向时将搜索条件作为URL参数传递。但是,这有点麻烦(特别是如果你有多个字段),你需要清理传入的数据。