ASP .NET MVC 3 + Вызов метода действия HttpPost с другого контроллера - PullRequest
0 голосов
/ 18 января 2012

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

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

  • Я реализовал контроллер Ctrl1.
    • Ctrl1 содержит метод действия HttpGet ActMeth1.
      • Папка Ctrl1Views содержит представление View1.
  • Я реализовал контроллер Ctrl2.
    • Ctrl2 содержит метод действия HttpPost ActMeth2.
      • ActMeth2 возвращает представление View2, включенное в папку Ctrl2Views.
  • Ctrl1 и Ctrl2 находятся в одном и том же пространстве имен.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 января 2012

Использование метода действия контроллера в методе действия другого контроллера приводит к возникновению проблем в долгосрочной перспективе.

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

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

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

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

0 голосов
/ 18 января 2012

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

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

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

...