【发布时间】:2010-09-25 21:43:09
【问题描述】:
ASP.NET ViewState 功能有时是一把双刃剑。我的大部分项目都依赖它,它大大加快了开发速度。
我的问题是,有时用户会尝试刷新页面,这会导致视图状态丢失,其他时候用户可能想要为页面添加书签,但当返回时视图状态将丢失。
当用户尝试刷新页面时,现代浏览器会显示一个愚蠢的对话框,该页面是根本不希望的 POST 操作(例如 asp 回发)的结果。
我想知道他们是否可以继续使用 ViewState 和回发模型,但没有刷新对话框的缺点。 (如果可能的话,为页面添加书签。)
我可能想要做的一个例子是在页面旁边有一个记录和复选框,用户可以选择检查他们想要删除的所有记录,然后单击删除按钮。用户单击删除后,记录在服务器上进行分析,新页面列出所有使用确认删除按钮选择的记录。现在,如果用户单击刷新,他们会得到这个愚蠢的框来确认他们是否要发布。
我知道 ViewState 是使用 Post Back 模型的结果,这意味着大多数 asp.net 页面都是 POST 操作的结果,但我想知道是否有任何解决方法。
我认为可能可行的解决方法:
在 Page_Unload 事件中,使用唯一 id 将视图状态保存在会话中,并将用户重定向到具有唯一 id 作为查询字符串参数的同一页面,在页面使用 url 中的唯一 id 加载后,从会话中加载视图状态并注入到当前页面。这样的方法将允许用户刷新页面并始终返回相同的结果。
附:
我知道我可以使用Response.Redirect() 和/或查询字符串,但我想使用ViewState 的简单性
【问题讨论】:
标签: .net asp.net post postback viewstate