在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" />
<% } %>
答案 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调用添加错误处理程序,则可以执行类似的操作。