0

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

搜索条件:crackers                  


从:ian@stackoverflow.com          
至:list@stackoverflow.com      
主题:How to maintain form state with PRG?
消息:Imagine a page with form input:              
 
 
 
 
 

发送

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

POST /mail/u/compose

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

并且客户端会发出一个GET新的页面。问题是现有表单的一些元素丢失了:

搜索条件:                  

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

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


奖金阅读

4

2 回答 2

1

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

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

于 2012-06-27T15:05:46.367 回答
1

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

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

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

于 2012-06-27T15:12:47.040 回答