2010-05-26 120 views

Respuesta

17

También podría simplemente redirigir directamente al método de este modo:

public class ThisController 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("OtherMethod", "OtherController"); 
    } 
} 
+0

Sí y si deseo devolver una lista de "OtherMethod"? var result = RedirectToAction no entrega la Lista ... – eMi

10

Técnicamente, sí. Puede llamar a un método estático de un controlador o inicializar una instancia de un controlador para llamar a sus métodos de instancia.

Esto, sin embargo, tiene poco sentido. Los métodos de un controlador deben invocarse indirectamente por el motor de enrutamiento. Si sientes la necesidad de llamar directamente a un método de acción de otro controlador, es un signo que necesitas rediseñar.

+2

De acuerdo. Es mejor devolver un 'RedirectToRouteResult' en lugar de simplemente llamar al otro controlador. –

7

Bueno, hay varias maneras de llamar en realidad un método de instancia en otro controlador o llamar a un método estático fuera de ese tipo de controlador:

public class ThisController { 
    public ActionResult Index() { 
    var other = new OtherController(); 
    other.OtherMethod(); 
    //OR 
    OtherController.OtherStaticMethod(); 
    } 
} 

También puede redirigir a otro controlador, lo que hace más sentido .

public class ThisController { 
    public ActionResult Index() { 
    return RedirectToRoute(new {controller = "Other", action = "OtherMethod"}); 
    } 
} 

O podría simplemente refactorizar el código común en su propia clase, lo que tiene aún más sentido.

public class OtherClass { 
    public void OtherMethod() { 
    //functionality 
    } 
} 

public class ThisController { 
    public ActionResult Index() { 
    var other = new OtherClass(); 
    other.OtherMethod(); 
    } 
} 
1

como controladores son sólo las clases de modo que sí, que podemos hacerlo. Podemos hacerlo por alguna de las siguientes maneras- 1.By redirecting- directamente return RedirectToAction("MethodName", "ControllerName");

2.By crear el objeto - ControllerName objController=new ControllerName(); objController.methodName(parameters)

1

probar esto.

var ctrl= new MyController(); 
ctrl.ControllerContext = ControllerContext; 
//call action 
return ctrl.Action(); 
Cuestiones relacionadas