ActionInvoker.InvokeAction(context,“Method”) - 如何将参数传递给被调用的方法?

时间:2011-11-08 10:35:07

标签: asp.net-mvc controlleractioninvoker

您好我有我的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 个答案:

答案 0 :(得分: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();

    }

答案 1 :(得分:1)

您不会将参数传递给调用的操作,而是使用模型绑定

如果你想从默认的模型绑定源(查询,表单,路径......)中传递一些自定义参数,请将它们包装在某个类中并为它实现自定义模型绑定器(或valueprovider,但我认为modelbinder更多适当的)。