ASP .NET MVC 3 + вызов метода действия HttpPost из другого контроллера

В настоящее время я разрабатываю полнофункциональное веб-приложение под VS2010 и использую платформу ASP .NET MVC 3.

Вот упрощенный обзор моего приложения:

  • I have implemented a controller Ctrl1.
    • Ctrl1 contains a HttpGet action method ActMeth1.
      • The Ctrl1Views folder contains a view View1.
  • I have implemented a controller Ctrl2.
    • Ctrl2 contains a HttpPost action method ActMeth2.
      • ActMeth2 returns a view View2 included in the Ctrl2Views folder.
  • Ctrl1 и Ctrl2 находятся в одном пространстве имен.

Я хочу, чтобы ActMeth1 вызывал ActMeth2 для выполнения некоторой логики, а затем возвращал View2.

Вот исходный код ActMeth1:

public ActionResult ActMeth1()
{
    Ctrl2 myCtrl2 = new Ctrl2();
    return myCtrl2.ActMeth2();
}

К сожалению, ActMeth1 возвращает View1.
Кто-нибудь может объяснить мне этот факт?
Заранее спасибо за помощь в будущем.


person user1139666    schedule 18.01.2012    source источник


Ответы (2)


Создание экземпляра метода действия контроллера в методе действия другого контроллера в долгосрочной перспективе создает проблемы.

Вы можете использовать временные данные или передавать данные через словарь маршрутов RedirectToAction.

Я думаю, вам лучше реорганизовать свою логику

Поскольку вы все равно пытаетесь выполнить эту логику на стороне сервера,

а. Создайте службу, которая выполняет работу обоих контроллеров. b. сделать представление общим для обоих действий контроллера или создать частичное представление для общего html c. Вызовите соответствующий метод службы и отобразите общее представление.

person chandmk    schedule 18.01.2012

Вы можете сделать:

public ActionResult ActMeth1()
{
    Ctrl2 myCtrl2 = new Ctrl2();
    myCtrl2.ActMeth2();
    return View("~/Views/Ctrl2Views/View2.cshtml");
}

Я не уверен, что вы должны создавать экземпляр контроллера 2 из контроллера 1, хотя...

person Ian Routledge    schedule 18.01.2012
comment
ActMeth2 делится данными с View2 через свойство коллекции ViewData. Если я применю ваше предложение, то данные, используемые Ctrl2, будут недоступны во время создания View2. - person user1139666; 18.01.2012