想象一下带有表单输入的页面:
搜索条件: 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来维护表单状态。
答案 0 :(得分:1)
我会在Session中存储必要的数据(我只会将其用于更大量的数据 - 并注意过时的数据错误),或者在重定向中的查询字符串上传递值(这不太容易错误,并可能更好地适用于少量数据)。
它不适合您的模式,但Server.Transfer也可能有用。
答案 1 :(得分:1)
如果搜索条件值应该在系统中的许多不同页面上持续存在(换句话说,在整个用户的会话中),它听起来像是存储在会话中的候选者。或者,如果它应该在多个会话中持续存在(即,下次用户登录时,它会记住上次使用的搜索条件),则需要将其保留在某个更永久的位置。
我不知道ASP.NET中的任何行为类似于MVC的“临时”空间,其中值在第一次读取时自动清理。当然,包装Session的辅助类(或便利函数)可以执行那种“只读”功能。
最后,您可以在重定向时将搜索条件作为URL参数传递。但是,这有点麻烦(特别是如果你有多个字段),你需要清理传入的数据。