1

我正在开发一个 ASP.NET MVC 3 项目,我想实现我的自定义错误处理逻辑。我试图通过像这样扩展 HandleErrorAttribute 来做到这一点:

public class ErrorHandlingAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (!filterContext.ExceptionHandled)
        {
            filterContext.Result = new JsonResult { 
                                                    Data = new { success = false, error = filterContext.Exception.ToString() }, 
                                                    JsonRequestBehavior = JsonRequestBehavior.AllowGet 
                                                  };
            filterContext.ExceptionHandled = true;
        }
    }
}

我需要的是,在一些 AJAX 调用之后,在模式弹出对话框上显示一些错误消息(通过呈现部分视图)。因此,在 OnException 方法中,我将 ExceptionContext 的结果设置为 JsonResult(我现在不将部分视图渲染为字符串,稍后我会这样做)

我的控制器操作如下(我用我的自定义过滤器装饰了它):

 [HttpPost]
 [ErrorHandling]
 public JsonResult Create(StopEditViewModel viewModel)
 {
        Stop stop = Mapper.Map<StopViewModel, Stop>(viewModel.Stop);

        if (ModelState.IsValid)
        {
            Stop addedStop = _testFacade.AddStop(stop);

            return Json(new { success = true, tableContainer = _tableName }, JsonRequestBehavior.DenyGet);
        }

        return Json(new { success = false }, JsonRequestBehavior.DenyGet);
 }

经过一番研究,我发现我需要filters.Add(new HandleErrorAttribute());从 Global.asax 中的 RegisterGlobalFilters 方法中删除行。我也这样做了。

我的 web.config 文件有<customErrors mode="On" />标签。

但是当我调用 Create POST 操作时,如果发生异常,则不会调用自定义过滤器方法。应用程序崩溃。我错过了什么吗?

谢谢。

4

1 回答 1

1

您可以在 ajax 选项中捕获 Exception OnFailure方法

In View
@using (Ajax.BeginForm("SomeAction", new AjaxOptions { OnFailure = "handleAjaxError" }))
{

}

function handleAjaxError(ajaxContext) {
     alert("Request failed, status code ");
}

当您使用 Ajax 调用操作时,它会在方法内返回。

于 2012-10-01T10:50:59.257 回答