我们可以从asp.net MVC中的另一个控制器调用控制器的方法吗?

问题描述:

我们可以从asp.net MVC中的其他控制器调用控制器的方法吗?我们可以从asp.net MVC中的另一个控制器调用控制器的方法吗?

您也只需直接重定向到方法,像这样:

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

是的,如果我想从“OtherMethod”返回一个列表? var result = RedirectToAction不传递List ... – eMi 2017-03-21 12:04:17

技术上,是的。您可以调用控制器的静态方法或初始化控制器的实例以调用其实例方法。

然而,这是没有道理的。控制器的方法意味着间接地由路由引擎调用。如果你觉得需要直接调用另一个控制器的动作方法,那么这是一个需要重新设计的标志。

+2

同意。最好返回一个'RedirectToRouteResult'而不是仅仅调用另一个控制器。 – 2010-05-26 07:41:52

嗯,有很多方法来实际调用另一个控制器上的实例方法或调用静态方法关闭该控制器型号:

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

你也可以重定向到另一个控制器,这使得更多的意义。

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

或者您可以将通用代码重构为其自己的类,这更有意义。

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

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

随着控制器只是类,所以是的,我们能做到这一点。我们可以通过下面的一些ways- 1.By做它直接redirecting- return RedirectToAction("MethodName", "ControllerName");

2.By创建对象 - ControllerName objController=new ControllerName(); objController.methodName(parameters)

尝试。

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