Asp.net mvc 3 当计算机长时间处于空闲状态后,如果会话中断,则显示带有完整站点的登录页面

Asp.net mvc 3 当计算机长时间处于空闲状态后,如果会话中断,则显示带有完整站点的登录页面,asp.net-mvc-3,Asp.net Mvc 3,我创建了一个asp.net mvc razor应用程序,在该应用程序中,我在一个div中加载了一个部分视图,登录后可以访问该视图 <% using (Ajax.BeginForm("Showproducts", "Home", new AjaxOptions { UpdateTargetId = "resdiv", OnBegin = "fstart()", OnSuccess = "fend()" }, new { id = "_myform" })) { %> .

我创建了一个asp.net mvc razor应用程序,在该应用程序中,我在一个div中加载了一个部分视图,登录后可以访问该视图

<% using (Ajax.BeginForm("Showproducts", "Home", new AjaxOptions {
    UpdateTargetId = "resdiv", OnBegin = "fstart()", OnSuccess = "fend()"
}, new { id = "_myform" }))
{ %>
    .....
<% } %>

.....
当用户离开计算机很长一段时间(这会使会话自动超时),然后单击submit按钮时,resdiv将充满带有登录面板的完整站点。我想在resdiv中不显示登录面板的完整站点。有没有办法避免这种行为

有没有办法避免这种行为

是的,有办法。我建议您阅读,其中Phil Haack演示了一种非常好的技术,允许您覆盖AJAX请求的表单身份验证模块,并能够发送401状态码,而不是重定向到登录页面

然后,在客户端,您可以使用一个可以测试状态代码的脚本,如果是401,则重定向到登录页面

例如,一旦安装了
AspNetHaack
NuGet,就可以将以下全局错误处理程序添加到视图中:

<script type="text/javascript">
    $(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
        if (jqXHR.status == 401) {
            // not authenticated => redirect to login page:
            window.location.href = '@FormsAuthentication.LoginUrl';
        }
    });
</script>

$(文档).ajaxError(函数(事件、jqXHR、ajaxSettings、thrownError){
如果(jqXHR.status==401){
//未验证=>重定向到登录页面:
window.location.href='@FormsAuthentication.LoginUrl';
}
});

我必须将SuppressFormsAuthenticationRedirectModule类添加到App_start.FormsAuthenticationConfig.cs才能使其正常工作。我还必须增加一个类:使用系统;我将Darin中的错误处理程序添加到我的_Layout.cshtml中。