ActionInvoker.InvokeAction (context, "Method") - как передать аргументы вызываемому методу? - PullRequest
2 голосов
/ 08 ноября 2011

Привет, у меня есть приложение 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 все значения по умолчанию.

Итак, мой вопрос - Как передать некоторые значения в метод, который я вызываю?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Я не знаю, было ли это ясно из моего вопроса, но я хотел добиться того, чтобы я не хотел улавливать какие-либо исключения в действиях своих контроллеров и по-прежнему получать красивое сообщение об ошибке. Поэтому мое решение, которое меня устраивает:

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();

    }
1 голос
/ 08 ноября 2011

Вы не передаете параметры вызываемому действию, вместо этого используйте привязку модели .

Если вы хотите передать некоторые пользовательские параметры из источников привязки модели по умолчанию (запрос, форма, маршрут ...), оберните их в некоторый класс и внедрите для него привязку пользовательской модели (или поставщика значений, но я думаюздесь лучше подойдет модель))

...