由于Ajax调用,未执行重定向

时间:2017-08-24 13:36:53

标签: c# asp.net-mvc

我有一个简单的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并且不执行重定向。你知道怎么办吗?

1 个答案:

答案 0 :(得分:1)

因为你确实得到了一个例外,ajax调用本身就失败了,这就是你得到警报的原因,但是你不能重定向到ajax调用的服务器端内的另一个页面。相反,您可以将重定向放在ajax调用的失败块中。像......那样......

error: function(){
   window.location = <put error page url here>
   alert('error');
}