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オプションでExceptionOnFailureメソッドキャッチできます

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 に答える