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