Используйте stopImmediatePropagation
функция объекта-события jQuery.
Сохраняет остальную часть обработчиков от того, чтобы быть выполняемым. Этот метод также останавливает пузырение путем вызова event.stopPropagation ().
$(document).click(function(event) {
alert('a');
event.stopImmediatePropagation();
return false;
});
$(document).click(function() {
alert('b');
});
Я думаю, вам нужно будет передать эту информацию с перенаправлением.
Есть несколько способов справиться с этим:
Рассмотрите возможность создания отдельных методов действий для каждого типа ответа, который вам нужен - UnauthorizedJson, UnauthorizedHtml, UnauthorizedEtc ... которые соответствовали исходному типу ответа действия
Передайте формат информацию с перенаправлением, добавив еще один параметр к неавторизованному методу и добавив его к URL-адресу в вашем фильтре
Используйте Request.IsAjaxRequest (), например:
public sealed class AjaxAuthorizeAttribute : AuthorizeAttribute
{
public AjaxAuthorizeAttribute() : base()
{
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
// Extends the original Web.MVC.AuthorizeAttribute for Ajax calls.
// Basically if the request is not authorized and the request is an AJAX Request.
// then we simply set the stats Code to 403 and set an empty Result, in order to
// determine in Javascript if the AJAX call came back completed and valid.
base.OnAuthorization(filterContext);
if (filterContext.Result == null)
{
return;
}
else if (filterContext.Result.GetType() == typeof(HttpUnauthorizedResult)
&& filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new ContentResult();
filterContext.HttpContext.Response.StatusCode = 403;
}
}
}
Примечание 403, а не 401, поскольку ASP.NET перехватывает 401 и превращает их в страницы ошибок HTML. Неважно, что ожидал вызов AJAX; он все еще может видеть код состояния.