jquery - mvc ajax 中的注销 View

标签 jquery ajax asp.net-mvc asp.net-mvc-4 razor

我使用 MVC4 razor 构建了一个网站,我使用两种操作链接来重定向 View 。 “@Ajax.ActionLink”和“@Html.ActionLink”。我有一个单独的注销 View ,问题是如果我所在的 View 作为 @Ajax.Action 链接调用并且 session 过期,那么我的注销页面将在主布局 View 内打开。我想在单独的 View 中打开注销 View ,每当我使用部分 View 时都会发生同样的事情。

请让我知道如何使用 ajax.actionlink 解决此问题,否则部分 View 注销页面将在单独的 View 上打开。

提前致谢..

最佳答案

您需要做的涉及一些服务器端和客户端编码。

首先,在服务器端,您需要捕获用户 session 已过期并且他们正在使用 ajax 的请求。

如果您使用标准身份验证属性,您可以像这样扩展它:

 public class AjaxAuthorizeAttribute : AuthorizeAttribute
    { 
        private class Http401Result : ActionResult
        {
            public override void ExecuteResult(ControllerContext context)
            { 
                context.HttpContext.Response.StatusCode = 401;
                context.HttpContext.Response.Write("Your session has expired. Please login again to continue.");
                context.HttpContext.Response.End();
            }
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.Result = new Http401Result();
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }

    }

在 Controller 或操作上使用该属性而不是Authorize

现在到客户端,当请求从服务器返回并带有 401 响应时,您想要捕获它并执行某些操作,让我们使用 Ajax 设置来实现此目的:

坚持这个人,它将永远运行:

$(document).ready(function () {

    $.ajaxSetup({
        cache: false
    });

    $(document).ajaxError(
        function (e, request) {
            if (request.status == 401) {
                alert("Your session has expired. Please login again to continue.");
                window.location = "/account/logon"; 
            } else {

            }
        }
    );
}

你就完成了。

关于jquery - mvc ajax 中的注销 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22130668/

相关文章:

IE8 中的 jQuery ajax 调用错误

javascript - 使用 onbeforeunload 时抑制确认对话框

javascript - 如何在 jquery $.each 调用中循环列表项

javascript - Google map 标记未通过 ajax 动态显示

javascript - 使用附加到同一 ID 的 HTML 按钮发送不同的值

c# - 从网页获取缩略图

javascript - 如何使用 jquery 以简短形式显示和隐藏一长串 div

jquery - 在 jQuery tmpl 中使用 "if"

asp.net - 使用 ASP .Net Core(非 mvc)的 Angular 2 路由

c# - 获取不同的列表值