0

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

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

当用户离开他们的计算机很长一段时间(这会使会话自动超时)然后单击提交按钮时,resdiv 将充满整个站点和登录面板。我想在 resdiv 中显示带有登录面板的完整站点。有什么办法可以避免这种行为?

4

1 回答 1

1

有什么办法可以避免这种行为?

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

然后在客户端你可以使用一个global AJAX handler你可以测试状态码的地方,如果它是 401 重定向到登录页面。

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

<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>
于 2013-03-04T08:14:02.787 回答