我们可以从asp.net MVC中的另一个控制器调用控制器的方法吗?
答案 0 :(得分:17)
你也可以简单地直接重定向到这样的方法:
public class ThisController
{
public ActionResult Index()
{
return RedirectToAction("OtherMethod", "OtherController");
}
}
答案 1 :(得分:10)
技术上,是的。您可以调用控制器的静态方法或初始化控制器的实例以调用其实例方法。
然而,这没有多大意义。控制器的方法意味着间接地由路由引擎调用。如果您觉得需要直接调用另一个控制器的动作方法,那么这是一个需要重新设计的标志。答案 2 :(得分:7)
好吧,有很多方法可以在另一个控制器上实际调用实例方法,或者从该控制器类型调用静态方法:
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();
}
}
答案 3 :(得分:1)
由于控制器只是类,所以是的,我们可以做到。我们可以通过以下几种方式做到 -
1.直接重定向 - return RedirectToAction("MethodName", "ControllerName");
2.通过创建对象 - ControllerName objController=new ControllerName();
objController.methodName(parameters)
答案 4 :(得分:1)
试试这个。
var ctrl= new MyController();
ctrl.ControllerContext = ControllerContext;
//call action
return ctrl.Action();
答案 5 :(得分:0)
是的,您可以调用另一个控制器的方法。
public ActionResult Index()
{
AccountController accountController = new AccountController {ControllerContext = ControllerContext};
return accountController.Index();
}
控制器也是一个简单的类。唯一的是它继承了Controller类。您可以创建控制器的对象,但如果要重定向到另一个页面,则不适用于“路由”。