Ajax.BeginForm检查请求是否被重定向

时间:2012-06-13 07:58:19

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

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

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

目前,我在会话结束时将整个登录页面嵌入当前页面的div中。

我看到如何解决这个问题的唯一方法就是这样的代码:

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

但这个解决方案看起来有点难看。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

public ActionResult PossibleRedirectAction(bool isRedirect = false)
{
    ViewBag.IsRedirect = isRedirect;
}

并将此代码置于您重定向的操作中:

RedirectToAction("PossibleRedirectAction", new {isRedirect = true});

答案 1 :(得分:0)

不要从通过AJAX调用的控制器操作重定向。您可以使用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的任何好处。只需使用标准链接=&gt;调用控制器操作即可。在这种情况下使用AJAX毫无意义。


更新:

您尝试执行的操作似乎是在表单身份验证Cookie过期时拦截重定向到LogOn页面。 Phil Haack在博客中写道:http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

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