Pregunta

Creo que entienden mal algo acerca de MVC. Estoy tratando de hacer lo siguiente:

public class ControllerA : Controller
{
    public ActionResult Index()
    {
        // do code

        // perform action on ControllerB - something like:
        // RedirectToAction("Action", "ControllerB");

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}

Obviamente RedirectToAction("Action", "ControllerB"); no está funcionando. Entonces, ¿cómo lo hago? Creo que podría tener todos los controladores que necesitan utilizar Acción hereda () desde ControllerB pero que se siente una muy mala manera de hacerlo. Por favor, ayuda!

¿Fue útil?

Solución

Usted tiene que devolver el ActionResult de RedirectToAction ()

return RedirectToAction("Action", "ControllerB");

es lo que hay que hacer si quiere RedirectToAction para realmente redirigir a una acción. Después de aclarado lo que "no está funcionando" significa que creo que sólo debe tener todos los controladores heredan de una base. Ese es un enfoque bastante estándar.

public class ControllerA : ControllerB
{
    public ActionResult Index()
    {
        // do code

        Action();

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}

Otros consejos

Creo que el controlador se está ejecutando actualmente es una instancia de la clase por lo que tendría que hacer una instancia del controlador B para ser capaz de ejecutar cualquier cosa en él, así que lo que está tratando de hacer allí sólo lo hará en realidad no trabajo sin un truco.

Creo sin embargo hay 2 métodos para obtener los resultados más Creo que está buscando:

1) Hacer una clase 'ControllerBase' y tienen todos los controladores heredan de él en lugar de a partir de 'controlador', entonces el código IMEI compartida que puede agregar a la clase base (como un método estático tal vez) y luego todos los controladores puedan acceder a ella como un buen miembro y fácil.

2) Como MVC hará una recta DLL puede agregar en nuevas clases como sea necesario, por ejemplo, añadir una nueva carpeta de proyecto como 'Globals' Añadir un nuevo archivo de clase llamada 'Funcs' y hay que tener un lib estática que se puede acceder desde cualquier lugar, Funcs.SendEmail (); etc.

Si estoy fuera de la marca OK! feliz codificación de todos modos je

I han inyectado controladores con un método de fábrica de la fábrica controlador como delegado (Func CreateController), y usado que para crear sub-controladores, como en esta circunstancia. Hay un montón de maneras de lograr su objetivo, pero creo que podría ser forma rápida de obtener lo que desea trabajar.

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