c# - ASP NET MVC 5:有什么方法可以避免/拦截返回浏览器按钮?
问题描述
在 ASP.NET MVC 5 应用程序中来回切换浏览器按钮的问题是否存在真正的解决方案?
用例:
A页:在表格中显示一些数据和2个按钮“删除,确认”。第一个删除数据,第二个转到页面B页面B:显示一些基于上一个的其他数据,以及一个“继续下一步”按钮。
页面操作在 GET 中。按钮在 POST 中(带有表单)
用户单击“删除”,数据被删除,然后返回浏览器按钮,Asp net mvc 再次显示页面 A。您仍会在表格中看到数据,单击“删除”会导致错误。您也可以点击前进进入页面B,即使真实数据被删除,该页面仍会显示数据。
目前发生的情况(最新的 Chrome、Edge,没有尝试其他浏览器):似乎浏览器会自动缓存这些页面。来回点击检索仍然在其中的数据的缓存版本(全部缓存)。控制器上没有调用任何操作,您可以随心所欲地来回走动,并且不会对控制器进行一次调用。所以你对它没有任何真正的控制权。
测试完成: 后退按钮不会导致回发到 MVC 中的控制器操作
什么也没做。仍然检索缓存的页面。
和上面一样。
https://forums.asp.net/t/1957310.aspx?Capture+Browser+Back+Button+and+execute+controller+action+
和上面一样。
不禁用后退按钮。
以此类推与以前的链接的各种口味。我什至尝试将它们混合在一起,将所有标题和 NoCache 以及此类属性和 javascript 放在一起。
没有什么。
找到的解决方案:将控件放在按钮上,它调用一个ajax post并且每次都被迫进行真正的调用。
是否存在解决方案?
解决方案
尝试覆盖本机 Web 浏览器功能是个坏主意。您将在多种浏览器行为及其进一步更新中挣扎。最好的解决方案是通过 ex 重新加载页面条目上的数据。使用 javascript 的 ajax 调用。
推荐阅读
- debugging - C struct - lldb 表达式失败
- javascript - Jquery 元素宽度与检查模式元素宽度
- python-3.x - 创建/检索内部类python的多个实例
- ios - Swift 如何避免在子类中覆盖初始化?(编码器)
- angular - ngx-translate:无法读取未定义的属性“currentLang”
- python - 根据分组字段计算唯一值
- java - 当我移动时,onLocationChange 方法没有执行
- ajax - 在 symfony 3 项目中使用 jQuery/ajax 获取 selectBox 的选定值
- c# - .Net Core:如何从 URL 字符串中获取 RouteData?
- powerbi - 比较 Power BI 中的静态列和计算列