.net - 带有页面刷新和书签的 ASP.NET ViewState 回发

标签 .net asp.net post postback viewstate

ASP.NET ViewState 功能有时可能是一把双刃剑。我的大部分项目都依赖它,它大大加快了开发速度。

我的问题是,有时用户会尝试刷新页面,这会导致 View 状态丢失,有时用户可能想要为页面添加书签,但是当取回时, View 状态将丢失。

当用户尝试刷新页面时,现代浏览器会显示一个愚蠢的对话框,该页面是 POST 操作(例如 asp 回发)的结果,而这根本不是可取的。

我想知道他们是一种继续使用 ViewState 和回发模型但没有刷新对话框缺点的方法。 (如果可能的话,为页面添加书签。)

我可能想要做的一个例子是在它们旁边有一个带有记录和复选框的页面,用户可以选择检查他们想要删除的所有记录,然后单击删除按钮。用户单击删除后,记录在服务器上进行分析,新页面列出所有使用确认删除按钮选择的记录。现在,如果用户单击刷新,他们会得到这个愚蠢的框来确认他们是否要发布。

我知道 ViewState 是使用 Post Back 模型的结果,这意味着大多数 asp.net 页面都是 POST 操作的结果,但我想知道是否有任何解决方法。

我认为可能有效的解决方法:
在 Page_Unload 事件中,使用唯一 id 将 View 状态保存在 session 中,并将用户重定向到具有唯一 id 作为查询字符串参数的同一页面,在页面使用 url 中的唯一 id 加载后,从 session 中加载 View 状态并注入(inject)到当前页面。这种方法将允许用户刷新页面并始终返回相同的结果。

附言
我知道我可以使用 Response.Redirect()和/或查询字符串,但我想使用 ViewState 的简单性

最佳答案

我的 2 美分:而不是使用 的简单性查看状态 沙袋使用简单 session - 这真的很简单,你不必担心页面刷新和其他东西。
此外, session 更加灵活,因为您可以使用它来存储不仅仅是内置类型而不影响性能(您也可以使用 ViewState 来存储,但会影响性能)。

关于.net - 带有页面刷新和书签的 ASP.NET ViewState 回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350310/

相关文章:

c# - Linq-To-SQL 查询中的 String.Split?

c# - 使用全局常量或枚举而不指定类名

asp.net - 如何修复 VS2013 和基本 ASP.NET 网站上显示的 SSL "page can' 错误?

php - PHP 中的 $_POST 请求我该如何申请?

ajax - 使用 Jackson 解析器在 Spring MVC 中映射 JSON 数据

c++ - 如何更改 WebBrowser 全屏视频模式?

c# - 测试单个值的 [Flags] 枚举值

javascript - 如何在 ASP.NET Core MVC 中将 js 字符串发布到 C#

c# - 将一些信息与可执行文件捆绑在一起?

android - 通过 HttpURLConnection (POST) 在 android 中发送多部分表单