asp.net-mvc-3 - Ajax.BeginForm 检查请求是否被重定向

标签 asp.net-mvc-3 asp.net-ajax ajax.beginform asp.net-mvc-ajax

如何确定异步请求表单ajax表单是否被重定向?
在我的情况下,如果用户的 session 关闭,请求将被重定向到登录页面。

我试图检查 OnComplete、OnSuccess 和 OnBegin 事件的参数(不调用 OnFailure)但没有人帮忙。

目前,在 session 关闭的情况下,我将整个登录页面嵌入到当前页面的 div 中。

我看到如何避免这种情况的唯一方法是这样的代码:

function onSuccessPost(a,b,c) {
   if (a.indexOf("<!DOCTYPE html>") == 0) {
      window.location = window.location;
   }
   // ...
}

但是这个解决方案似乎有点难看。

有任何想法吗?

最佳答案

不要从通过 AJAX 调用的 Controller 操作重定向。您可以使用 JSON:

public ActionResult Foo()
{
    var url = Url.Action("Bar", "Baz");
    return Json(new { location = url }, JsonRequestBehavior.AllowGet);
}

现在在您的 AJAX 成功回调中:
success: function(result) {
    window.location.href = result.location;
}

显然,如果您打算在 AJAX 请求后始终从客户端重定向,这将完全消除 AJAX 的任何好处。只需使用标准链接调用 Controller 操作 => 在这种情况下使用 AJAX 毫无意义。

更新:

似乎您正在尝试做的是在表单例份验证 cookie 过期时拦截到登录页面的重定向。 Phil Haack 写了一篇博客:http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

在本文中,他说明了如何防止表单例份验证模块自动将您重定向到登录页面,而是发送一个 401 状态代码,该代码可能被您的 AJAX 请求拦截并在客户端上执行重定向。

关于asp.net-mvc-3 - Ajax.BeginForm 检查请求是否被重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010501/

相关文章:

asp.net-mvc-3 - MVC 3 在哪里加密用户的密码?

asp.net-mvc - MVC 日期时间验证失败

javascript - 在 C# 和 Fabric.js 中添加对象并保存图像

asp.net-mvc-3 - 在 MVC3 中扩展不显眼的 javascript 以向 div 客户端添加样式的最佳方法

javascript - 为什么 jQuery element[] 选择器在这种情况下不起作用?

jquery - 使用 javascript/jquery 检测 Asp.Net 表单是否有效

asp.net - 为什么我的asp是:TreeView selected node reset when in an UpdatePanel?

jquery - 从分部 View 使用 Ajax.BeginForm,表单操作使用父 Controller ,而不是定义的 Controller

ajax - 如何在 Asp.net MVC 4 中使用简单的 Ajax Beginform?

javascript - Ajax.BeginForm 强制完全回发