Передача ViewData в PartialView, возвращенная с помощью Html.Action

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

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

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

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

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

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

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

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


person RWGodfrey    schedule 05.05.2010    source источник


Ответы (1)


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

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