Есть ли способ вернуть ActionResult из контроллера B, вызванного из контроллера A, при этом предоставляя конкретную модель B? - PullRequest
5 голосов
/ 08 марта 2011

Допустим, у меня есть контроллер:

public BController : Controller
{
    public ActionResult Foo(FooViewModel vm)
    {
       ...
    }
 }

и в то же время я реализую действие в другом контроллере AController, где я хочу визуализировать результат BController.Foo, передавая конкретный объект модели. Итак:

public AController : Controller
{
     public ActionResult Bar(BarViewModel vm)
     {
          FooViewModel fooVm = MakeFooVM(vm);
          return ... ; // pass fooVm to BController
     }
}

Есть ли способ сделать это в MVC?

Ответы [ 4 ]

5 голосов
/ 09 мая 2013

Отсутствует шаг в ответе выше. После создания контроллера необходимо установить ControllerContext, чтобы заполнить запрос контроллера, ответ и HttpContext. Простое создание контроллера приведет к нулевым значениям для настроек контекста контроллера.

public AController : Controller
{
     public ActionResult Bar(BarViewModel vm)
     {
          FooViewModel fooVm = MakeFooVM(vm);
          var bController = new BController();
          bController.ControllerContext = new ControllerContext(this.ControllerContext.RequestContext, bController);
          return bController.Foo(fooVm);
     }
}

Источник: Получить ActionResult другого действия контроллера?

0 голосов
/ 07 апреля 2016

Обновление @ ответа WWC , которое поможет целевому действию найти нужное представление.

public AController : Controller
{
     public ActionResult Bar(BarViewModel vm)
     {
          FooViewModel fooVm = MakeFooVM(vm);
          var bController = new BController();
          var bControllerContext = new ControllerContext(this.ControllerContext.RequestContext, bController);
          // update route so action can find the (partial)view
          bControllerContext.RouteData.Values["controller"] = "B";
          bController.ControllerContext = bControllerContext;
          return bController.Foo(fooVm);
     }
}
0 голосов
/ 08 марта 2011

Посмотрите на этот URL, который объясняет, как передавать параметры при перенаправлении от одного действия к другому: http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/

Надеюсь, это полезно для вас.

0 голосов
/ 08 марта 2011

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

public AController : Controller
{
     public ActionResult Bar(BarViewModel vm)
     {
          FooViewModel fooVm = MakeFooVM(vm);
          var bController = new BController();
          return bController.Foo(fooVm);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...