2

こんにちは、mvc アプリとこのコード スニペットがあります。

    protected override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);
        ActionInvoker.InvokeAction(filterContext, "ErrorMessage");
    }

    public ActionResult ErrorMessage(ExceptionContext filterContext)
    {
        ViewModel<Exception> viewModel = ViewModelFactory.CreateFor(filterContext.Exception);
        return View(viewModel);
    }

問題は、メソッドに引数を渡すことができないことです。このfilterContextだと思っていましたが、ErrorMessageメソッドにはすべてデフォルト値があります。

だから私の質問は - 私が呼び出すメソッドにいくつかの値を渡す方法は?

4

2 に答える 2

2

私の質問から明らかだったかどうかはわかりませんが、達成したかったのは、コントローラーのアクションで例外をキャッチしたくないということでした。したがって、私を満足させる私の解決策は次のとおりです。

protected override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);
        TempData.Add(MyCommons.Exception, filterContext.Exception);
        var controllerName = filterContext.RequestContext.RouteData.Values["Controller"];
        filterContext.Result =
            new RedirectToRouteResult(new RouteValueDictionary(new {controller = controllerName, action = "Error"}));
        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();

    }
于 2011-12-21T17:25:51.013 に答える
1

呼び出されたアクションにパラメーターを渡さず、代わりにモデル バインディングを使用します。

デフォルトのモデルバインディングソース(クエリ、フォーム、ルートなど)からいくつかのカスタムパラメーターを渡したい場合は、それらをいくつかのクラスにラップし、カスタムモデルバインダーを実装します(またはvalueproviderですが、ここではmodelbinderの方が適切だと思います) .

于 2011-11-08T11:12:40.950 に答える