Можем ли мы назвать метод контроллера с другого контроллера в asp.net MVC?

Можно ли вызвать метод контроллера с другого контроллера в asp.net MVC?

Ответы

Ответ 1

Вы также можете просто перенаправить прямо на метод следующим образом:

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

Ответ 2

Технически, да. Вы можете вызвать статический метод контроллера или инициализировать экземпляр контроллера для вызова его методов экземпляра.

Это, однако, имеет мало смысла. Методы контроллера должны быть вызваны путем косвенной маршрутизации двигателя. Если вы чувствуете необходимость прямого вызова метода действия другого контроллера, это знак, который вам нужен для редизайна.

Ответ 3

Ну, существует множество способов фактически вызвать метод экземпляра на другом контроллере или вызвать статический метод с этого типа контроллера:

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();
  }
}

Ответ 4

Поскольку контроллеры - это просто классы, то да, мы можем это сделать. Мы можем сделать это несколькими способами: 1. Прямое перенаправление - return RedirectToAction("MethodName", "ControllerName");

2. Создаем объект - ControllerName objController=new ControllerName();             objController.methodName(parameters)

Ответ 5

Попробуйте это.

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

Ответ 6

Да, вы можете вызвать метод другого контроллера.

public ActionResult Index()
        {
            AccountController accountController = new AccountController {ControllerContext = ControllerContext};
            return accountController.Index();
        }

Контроллер тоже простой класс. Единственное, что его наследует класс контроллера. Вы можете создать объект контроллера, но он не будет работать для маршрутизации, если вы хотите перенаправить на другую страницу.