Ответ 1
Вы также можете просто перенаправить прямо на метод следующим образом:
public class ThisController
{
public ActionResult Index()
{
return RedirectToAction("OtherMethod", "OtherController");
}
}
Можно ли вызвать метод контроллера с другого контроллера в asp.net MVC?
Вы также можете просто перенаправить прямо на метод следующим образом:
public class ThisController
{
public ActionResult Index()
{
return RedirectToAction("OtherMethod", "OtherController");
}
}
Технически, да. Вы можете вызвать статический метод контроллера или инициализировать экземпляр контроллера для вызова его методов экземпляра.
Это, однако, имеет мало смысла. Методы контроллера должны быть вызваны путем косвенной маршрутизации двигателя. Если вы чувствуете необходимость прямого вызова метода действия другого контроллера, это знак, который вам нужен для редизайна.
Ну, существует множество способов фактически вызвать метод экземпляра на другом контроллере или вызвать статический метод с этого типа контроллера:
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();
}
}
Поскольку контроллеры - это просто классы, то да, мы можем это сделать. Мы можем сделать это несколькими способами:
1. Прямое перенаправление - return RedirectToAction("MethodName", "ControllerName");
2. Создаем объект - ControllerName objController=new ControllerName();
objController.methodName(parameters)
Попробуйте это.
var ctrl= new MyController();
ctrl.ControllerContext = ControllerContext;
//call action
return ctrl.Action();
Да, вы можете вызвать метод другого контроллера.
public ActionResult Index()
{
AccountController accountController = new AccountController {ControllerContext = ControllerContext};
return accountController.Index();
}
Контроллер тоже простой класс. Единственное, что его наследует класс контроллера. Вы можете создать объект контроллера, но он не будет работать для маршрутизации, если вы хотите перенаправить на другую страницу.