Pregunta

Me gustaría tener acceso a la corriente Controlador de ejecución para que pueda descargar el retorno de la ActionResult apropiada en un método de ayuda. Con este fin, estoy buscando el equivalente a lo que habría pensado sería ControllerContext.Current pero no lo es. Gracias!

Editar una aclaración: tengo un control de forma genérica, que está basado en JavaScript, pero me gustaría añadir una opción para que funcione con noscript. En el momento en que mi controlador establece la ViewData.Model a un Models.FormResponse JSON-cado .

Esta FormReponse está configurado con el estado del poste y los mensajes de error que se generaron, así que me gustaría un método GetActionResult (), que hace la comprobación de script / noscript (una forma de entrada oculto) y, o bien:

  1. Define el modelo de la JSONed FormResponse y devuelve una Vista (), o
  2. Serializa la FormResponse a la sesión y devuelve una redirección ().

Como esto cambia, obviamente, el valor de retorno y que no quieren hacer lo mismo cada vez que marque, tengo que llamar Ver o redirigida desde GetActionResult método del FormResponse con el fin de llamar a esto como:

return formResponse.GetActionResult();

Sé que con un diseño más astronáutica esto podría hacerse aún más robusto, pero como la opción noscript no es una característica importante en este momento, sólo necesito para obtener una solución rápida de trabajo que no se rompa otras cosas.

Actualización # 2

A continuación, implementado en una clase de ActionResult, hace el trabajo para mí. Gracias CVertex!

public override void ExecuteResult(ControllerContext context)
    {
        if (CMSEnvironment.NoScript)
        {
            Oracle.Response.Redirect(Oracle.Request.UrlReferrer.ToString(), true);
        }

        context.Controller.ViewData.Model = _model.ToJSON();

        new ViewResult()
        {
            ViewName = Areas.Site.Helpers.SharedView.Service,
            ViewData = context.Controller.ViewData
        }.ExecuteResult(context);
    }
¿Fue útil?

Solución

La estática son malos para la capacidad de prueba, y muy desanimado en MVC.

¿Por qué desea tener acceso al método controlador y la acción actual?

La mejor manera de hacer esto es implementar su propio ActionFilter . Esto le da un medio de interceptar las solicitudes antes o después de ejecutar acciones métodos.

EDIT: Al interceptar el resultado dentro OnActionExecuted de un filtro, que puede hacer sus cheques noscript / script y modificar su ViewData en consecuencia para el consumo de la vista. Dentro OnActionExecuted, también se puede hacer el check noscript y tener un control completo sobre el ActionResult final o el ViewData, a su gusto.

O, usted puede escribir su propia ActionResult que hace que todas estas decisiones. Por lo tanto, su acción de controlador hace en última instancia

return new MyActionResult(format_and_view_agnostic_model_object);

Otros consejos

No parece ser una manera de navegar al controlador de corriente de un hilo. Es decir que usted podría conseguir el ControllerBuilder y se puede obtener la MvcHttpHandler pero ni entonces le permite acceder a la instancia controladora de que el controlador está utilizando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top