Вопрос

Есть ли хороший способ назначить ViewData вложенным главным страницам? Например, на моей главной странице верхнего уровня у меня может быть информация о зарегистрированном пользователе. У меня также есть вложенная главная страница, которая отображается, когда пользователь находится на любой странице отдела. Я хочу, чтобы эти данные были доступны ТОЛЬКО на страницах департамента.

Так вот как это выглядит:

Top Level Master Page - Includes ViewData["userData"]
    |
    |
    ---> Nested Master Page - Includes ViewData["departmentalData"]

Таким образом, всякий раз, когда у меня есть представление, использующее вложенную главную страницу, оно будет включать в себя как ViewData [" userData "], так и ViewData [" DepartmentalData "]. Но если я использую только главную страницу верхнего уровня, у меня есть только ViewData [" userData "]. Это возможно?

Это было полезно?

Решение

Если вы настаиваете на использовании ViewData в качестве носителя данных для главных страниц (вместо использования Html.RenderAction (...) из проекта MvcContrib, который я, вероятно, использовал бы), тогда, если вы можете определить, в каких случаях вложенные Будет использоваться мастер-страница, вы можете настроить ActionFilter для ввода необходимых данных в ViewData [" DepartmentalData "].

Другие советы

Одна из возможностей - написать метод расширения для ViewPage и ViewMasterPage, чтобы получить необходимые данные. Я не уверен, но думаю, что именно это сделал Роб Конери в своем Commerce.MVC пакете. Посмотрите на это.

У нас была та же проблема. Пока что мы создали базовый класс для всех контроллеров и защищенный метод для генерации ViewData. Мы вызываем это из всех действий, которые используют эту конкретную главную страницу.

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

Существует концепция субконтроллеров для MVC (я не уверен, что он все еще присутствует и будет использоваться в инфраструктуре MVC). Вы можете найти его в проекте mvc contrib на codeplex. Некоторое описание или сообщение в блоге можно найти здесь ...

http://mhinze.com/subcontrollers-in-aspnet-mvc/

и передача объектов этому субконтроллеру обсуждается здесь ...

http://mhinze.com/passing-objects-to-subcontrollers/

Это не основано на главных страницах, но может помочь вам ...

Пока ваш контроллер устанавливает правильные ViewData для страницы, которая будет просматриваться, не должно иметь значения, сколько главных страниц используется. Или я что-то упустил?

scroll top