2010-05-26 22 views

risposta

17

Si potrebbe anche semplicemente reindirizzare dritto al metodo in questo modo:

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

Sì e se voglio restituire una lista da "OtherMethod"? var result = RedirectToAction non consegna l'elenco ... – eMi

10

Tecnicamente, sì. È possibile chiamare un metodo statico di un controller o inizializzare un'istanza di un controller per chiamare i relativi metodi di istanza.

Questo, tuttavia, ha poco senso. I metodi di un controller devono essere invocati dal motore di routing indirettamente. Se senti la necessità di chiamare direttamente un metodo di azione di un altro controller, è un segno che devi fare una riprogettazione.

+2

Concordato. È meglio restituire un 'RedirectToRouteResult' piuttosto che chiamare l'altro controller. –

7

Beh, ci sono diversi modi per chiamare in realtà un metodo di istanza su un altro controller o chiamare un metodo statico fuori che tipo di controller:

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

Si potrebbe anche reindirizzare ad un altro controller, il che rende più senso .

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

Oppure si può semplicemente ridefinire il codice comune nella propria classe, il che ha ancora più senso.

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

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

Come controllori sono solo classi in modo Sì, ce la possiamo fare. Siamo in grado di farlo da alcuni dei seguenti modi- 1.By redirecting- direttamente return RedirectToAction("MethodName", "ControllerName");

2.By creazione di oggetti - ControllerName objController=new ControllerName(); objController.methodName(parameters)

1

Try This.

var ctrl= new MyController(); 
ctrl.ControllerContext = ControllerContext; 
//call action 
return ctrl.Action(); 
Problemi correlati