Asp.net mvc 4 点击后刷新页面-MVC 4

Asp.net mvc 4 点击后刷新页面-MVC 4,asp.net-mvc-4,Asp.net Mvc 4,当我点击此页面时,有什么简单的方法可以强制我的ActionResult始终启动?例如,在浏览器上单击“上一步”,将不会执行此操作 public ActionResult Index() { //do something always return View(); } 您可以尝试onunload事件和ajax: <script> window.onunload = function () { $.ajax({ url: '/Con

当我点击此页面时,有什么简单的方法可以强制我的
ActionResult
始终启动?例如,在浏览器上单击“上一步”,将不会执行此操作

public ActionResult Index()
{
    //do something always

    return View();
}

您可以尝试
onunload
事件和ajax:

<script>
   window.onunload = function () {
      $.ajax({
         url: '/ControllerName/Index',
         type: 'POST',
         datatype: "json",
         contentType: "application/json; charset=utf-8"
      });
   };
</script>

window.onunload=函数(){
$.ajax({
url:“/ControllerName/Index”,
键入:“POST”,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”
});
};

禁用
ActionResult
上的缓存会强制页面每次刷新,而不是呈现缓存版本

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public ActionResult Index()
{
    //do something always

    return View();
}

现在,当您单击“浏览器后退”按钮时,每次都会点击此按钮。

将此代码添加到我的HTML中对我来说很好:

<input id="alwaysFetch" type="hidden" />
<script>
    setTimeout(function () {
        var el = document.getElementById('alwaysFetch');
        el.value = el.value ? location.reload() : true;
    }, 0);
</script>

setTimeout(函数(){
var el=document.getElementById('alwaysFetch');
el.value=el.value?location.reload():true;
}, 0);
这对于那些不喜欢处理服务器端代码而不是接受的解决方案的人来说可能很方便


它所做的只是在第一次加载时为隐藏的输入赋值,该值将保留在第二次加载时,页面将被强制刷新。

我考虑过类似的事情,但不确定尝试重定向onunload是否是一个好主意。我应该关心的任何事情,或者这是一个可以接受的跨浏览器工作的事情吗?另外,我怎么知道用户试图返回?我不想总是重定向到此页面。您唯一应该关心的是,您的操作将在浏览器“后退”按钮单击和“刷新”按钮单击时调用。即使你在你的页面上做了一些回发。我曾经遇到过这个问题,这是我唯一能解决它的方法。谢谢,你问题的链接很有帮助。我想我不需要在我的情况下采取如此激进的方法。我可以在索引的ready事件中处理一些事情,而不是在离开下一页时(只是不知道它是什么)。如果不需要的话,我不想触碰默认的返回单击行为:)使用前面提到的
VaryByParam=“None”
怎么样?