2010-05-26 7 views

Répondre

17

Vous pouvez également rediriger simplement directement à la méthode comme ceci:

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

Oui et si je veux retourner une liste de "OtherMethod"? var resultat = RedirectToAction ne fournit pas la liste ... – eMi

10

Techniquement, oui. Vous pouvez appeler une méthode statique d'un contrôleur ou initialiser une instance d'un contrôleur pour appeler ses méthodes d'instance.

Ceci, cependant, n'a pas de sens. Les méthodes d'un contrôleur sont censées être appelées par le moteur de routage indirectement. Si vous ressentez le besoin d'appeler directement une méthode d'action d'un autre contrôleur, c'est un signe que vous avez besoin d'une refonte à faire.

+2

D'accord. Mieux vaut renvoyer un RedirectToRouteResult plutôt que d'appeler simplement l'autre contrôleur. –

7

Eh bien, il y a plusieurs façons d'appeler en fait une méthode d'instance sur un autre contrôleur ou appeler une méthode statique ce type de contrôleur:

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

Vous pouvez également rediriger vers un autre contrôleur, ce qui est plus logique . Ou vous pouvez simplement refactoriser le code commun dans sa propre classe, ce qui est encore plus logique.

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

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

Comme les contrôleurs ne sont que des classes si Oui, nous pouvons le faire. Nous pouvons le faire par certains des éléments suivants 1.By redirecting- façons-directement return RedirectToAction("MethodName", "ControllerName");

objet la création 2.By - ControllerName objController=new ControllerName(); objController.methodName(parameters)

1

essayer.

var ctrl= new MyController(); 
ctrl.ControllerContext = ControllerContext; 
//call action 
return ctrl.Action(); 
Questions connexes