我有一个简单的LogIn表单,在单击的LogIn按钮上执行对ActionResult LogIn(LogInRequest request)
中AccountController
的ajax调用,返回JsonResult
。我CustomHandleErrorAtribute
继承自HandleErrorAttribute
并重定向到CustomErrorPage.cshtml
。
抛出ActionResult异常中的Somwhere,应该由CustomHandleErrorAtribute
处理并处理它。然后执行CustomErrorPage操作但它不会实际返回视图。它保持在相同的LogInPage。
我在AccountController中的LogIn操作
[AllowAnonymous]
[HttpPost]
[CustomAttributes.CustomHandleError]
public ActionResult Login(LogInRequest request)
{
StandartResponse finalResult = new StandartResponse();
//some code that trows exception
return new JsonResult() { Data = finalResult.Result};
}
点击LogIn按钮调用我的Ajax:
function LogInUser(s, e) {
var example = { username: UserName.GetValue(), password: Password.GetValue() };
$.ajax({
contentType: "application/json; charset=utf-8",
dataType: 'json',
type: "POST",
url: "/Account/LogIn",
data: JSON.stringify({ request: example }),
success: function (data) {
jQuery.ajaxSettings.traditional = true;
if (data.Status == InfoType.Success) {
alert('success');
var url = "/Home/Index";
window.location.href = url;
}
else {
alert('here');
var result = JSON.stringify(data.Infoes);
popUpErrorMessagePartial.PerformCallback({ message: result });
popUpErrorMessagePartial.Show();
}
},
error: function(){
alert('error');
}
});
}
CustomHandleErrorAttribute:
public override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result =
new RedirectToRouteResult(new RouteValueDictionary
{
{ "action", "ErrorUnauthorised" },
{ "controller", "CustomErrorPages" },
{ "Area", String.Empty }
});
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
}
在调试后执行CustomErrorPage的Action,但是执行ajax调用中的错误后,将显示allert并且不执行重定向。你知道怎么办吗?
答案 0 :(得分:1)
因为你确实得到了一个例外,ajax调用本身就失败了,这就是你得到警报的原因,但是你不能重定向到ajax调用的服务器端内的另一个页面。相反,您可以将重定向放在ajax调用的失败块中。像......那样......
error: function(){
window.location = <put error page url here>
alert('error');
}