如何在AJAX表单(Ajax.BeginForm)中重定向到登录页面?

时间:2010-06-23 17:32:10

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

在MVC中,如何在AJAX表单中正确处理页面超时。目前,在提交AJAX表单时,AJAX表单的DOM将被登录页面内容替换。我想将整个页面重定向到“登录”页面。

我在Ajax表单(AJAX.BeginForm)中有一个带有Partial Form的ASP.Net MVC应用程序。该应用程序使用Windows窗体身份验证。通常,当网站超时时,您被正确地重定向到“登录”页面。但是,当AJAX表单提交并且网站超时时,MVC将返回登录页面作为AJAX表单的内容。永远不会达到Controller操作方法。我尝试过JQuery.load,结果相同。

控制器

    public ActionResult Index()
    {
        ViewData["Now"] = DateTime.Now.ToString("HH:mm:ss");
        return View("Index");
    }
    public ActionResult AjaxTimeout()
    {
        ViewData["Now"] = DateTime.Now.ToString("HH:mm:ss");
        return PartialView("AjaxTimeout");
    }

Timeout.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<html>
<head>
<script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
</head>
<body>
    Parent page:
    <div id="ajaxtimeout" style="height:300px; width:300px;">
    <%= Html.Partial("AjaxTimeout") %>
</div>
</body>
</html>

AjaxTimeout.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% using (Ajax.BeginForm("AjaxTimeout", new AjaxOptions { UpdateTargetId = "ajaxtimeout"})) { %>
    Return Time: <%= ViewData["Now"] %> 
    <input type="submit" value="Submit" />
<% } %>

1 个答案:

答案 0 :(得分:3)

我不会将Microsoft脚本用于我们的应用程序,因为我们通常会将jQuery用于所有内容,因此需要根据您的具体情况调查此解决方案,但这是我如何解决它。

每当我启用一个支持Ajax的应用程序时,我会使用jQuery的$ .ajax函数的包装器来生成所有的ajax请求。在包装器方法内部,在它返回对发出ajax请求的代码的响应之前,它专门检查401响应以查看身份验证是否超时。如果是这样,它只会导致整个窗口重定向到登录页面。

// The error handler for the ajax request.
            error: function (objXHR, status, errorThrown) {
...
                // Redirect to login if the ajax request returned a 401
                if (objXHR.status == "401") {
                    window.location.reload();
                    return;
                }
...
            }

如果您可以向Microsoft版本的ajax调用添加错误处理程序,则可以执行类似的操作。

相关问题