You can expand the attribute [Authorize]so that you can override the function HandleUnauthorizedRequestto return JsonResultto your AJAX call.
public class AuthorizeAjaxAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext
filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var referrer = filterContext.HttpContext.Request.UrlReferrer;
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { redirectTo = FormsAuthentication.LoginUrl +
"?ReturnUrl=" +
referrer.LocalPath.Replace("/", "%2f") }
};
}
else
base.HandleUnauthorizedRequest(filterContext);
}
}
Create a Javascript function handling redirection:
<script type="text/javascript">
function replaceStatus(result) {
if (result.redirectTo) {
window.location.href = result.redirectTo;
}
else {
$('#mydiv').html(result);
}
};
</script>
And then call this function in the OnSuccess option of your Ajax.ActionLink
Ajax.ActionLink("Update Status", "GetStatus",
new AjaxOptions { OnSuccess="replaceStatus" })
source
share