ActionInvoker.InvokeAction (contexto, "Método") - ¿cómo pasar argumentos al método invocado?

Hola, tengo mi aplicación MVC y este fragmento de código:

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

El problema es que no puedo pasar argumentos al método. Pensé que sería este filterContext pero en el método ErrorMessage tiene todos los valores predeterminados.

Entonces mi pregunta es: ¿Cómo pasar algunos valores al método que invoco?

preguntado el 08 de noviembre de 11 a las 10:11

2 Respuestas

No sé si estaba claro a partir de mi pregunta, pero lo que quería lograr era que no quería detectar ninguna excepción en las acciones de mis controladores y aún así recibir un mensaje atractivo sobre el error. Entonces mi solución que me satisface es:

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

    }

Respondido el 21 de diciembre de 11 a las 21:12

No pasa parámetros a la acción invocada, use encuadernación modelo en vez.

Si desea pasar algunos parámetros personalizados de las fuentes de enlace de modelos predeterminadas (consulta, formulario, ruta ...), envuélvalos en alguna clase e implemente su carpeta de modelos personalizada para ellos (o valueprovider, pero creo que modelbinder es más apropiado aquí) .

respondido 08 nov., 11:15

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.