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アクションを呼び出すと、例外が発生した場合、カスタムフィルターメソッドは呼び出されません。アプリケーションがクラッシュします。私は何かが足りないのですか?
ありがとう。