присвоение ViewData вложенным главным страницам
-
06-07-2019 - |
Вопрос
Есть ли хороший способ назначить 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. Некоторое описание или сообщение в блоге можно найти здесь ...
Пока ваш контроллер устанавливает правильные ViewData для страницы, которая будет просматриваться, не должно иметь значения, сколько главных страниц используется. Или я что-то упустил?