Возврат объектной модели в представление, которое обрабатывается другим контроллером - PullRequest
0 голосов
/ 05 ноября 2010


Как я могу передать объектную модель в представление, то есть частичное представление на главной странице?

привет

Ответы [ 3 ]

0 голосов
/ 05 ноября 2010

Вы можете указать местоположение вида:

return PartialView("~/Views/SomeOtherController/SomePartial.ascx", someModel);
0 голосов
/ 05 ноября 2010

Лучшая ставка здесь - RenderAction over RenderPartial.Ваш дочерний контроллер может легко определить, вошел ли пользователь в систему и отобразить правильную часть, а не заставлять вашу главную страницу беспокоиться об этих деталях.

0 голосов
/ 05 ноября 2010

Вы могли бы рассмотреть возможность создания другого объекта, который более точно представляет представление, которое вы пытаетесь визуализировать.

Допустим, у меня есть объект MyDomain.Order, поэтому я делаю страницу вида, которая выглядит примерно как ViewPage<MyDomain.Order>.Теперь, скажем, у меня есть меню, которое отключено от зарегистрированного пользователя, например.Не имеет смысла иметь меню как свойство MyDomain.Order.Я хотел бы создать другой объект, специально для вида, назовите его как OrderPageModel и иметь свойства MyDomain.Order и List<MenuItem> в качестве свойств этого нового объекта, мой вид будет настроен как ViewPage<OrderPageModel>.

Другая вещь, которую следует учитывать, может быть чем-то вроде Html.RenderAction().У меня такой же сценарий, и, как вы упомянули в своем вопросе, он имеет главную страницу, и, как в моем примере, допустим, он содержит меню, общее для вашего сайта.Вы можете создать частичное представление (UserMenu.ascx) и контроллер (SiteController.cs) с действием (UserMenu), которое вычисляет элементы для меню.Внутри вашей главной страницы вы можете затем позвонить <% Html.RenderAction("UserMenu","SiteController") %>.

. Я бы использовал первый пример, если это может быть что-то, созданное для определенного вида: просто сделайте его частью модели.Я бы использовал второй пример, если бы он был чем-то более общим для сайта, например меню.

...