Передача ViewData в PartialView, возвращенный при использовании Html.Action - PullRequest
3 голосов
/ 05 мая 2010

Я хочу встроить частичное представление в страницу ASP.NET MVC, возвращая его из метода действия.

В базовом представлении у меня будет:

<%= Html.Action("MyPartialViewAction") %>

MyКонтроллер будет иметь метод действия, такой как:

[ChildActionOnly]
public ActionResult MyPartialViewAction()
{
    return PartialView("MyPartialView");
}

Я ожидал, что возвращенное частичное представление (MyPartialView) будет иметь доступ к ViewData, который был установлен в действии контроллера базовой страницы, но это не похоже надело.Если я вставляю частичное представление, используя следующее в моем базовом представлении, это работает:

<% Html.RenderPartial("MyPartialView") %>

Я не хочу этого делать, хотя, потому что я хочу, чтобы моя "MyPartialViewAction" выполняла логику, чтобы определить, КАКОЕ частичное представлениевернуться.

1 Ответ

3 голосов
/ 05 мая 2010

Я считаю, что на самом деле он создает новый контроллер, а это означает, что любое создаваемое им представление будет иметь ViewData от этого контроллера, а не тот контроллер, который создал представление, вызывающее метод Action. Возможно, вы захотите попробовать:

  1. Измените вашу логику выбора на отдельный метод и используйте ее в исходном действии, чтобы выбрать частичное имя представления. Заполните это в своей модели и используйте его через RenderPartial.
  2. Используйте TempData (или Session, напрямую) для хранения ViewData предыдущего действия и гидратации ViewData нового контроллера из него.
  3. Если требуемые данные ограничены, передайте их в RouteValueDictionary - ваше действие должно будет получить их в качестве параметров.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...