назначение ViewData для вложенных мастер-страниц - PullRequest
7 голосов
/ 07 мая 2009

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

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

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

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

Ответы [ 5 ]

1 голос
/ 18 мая 2009

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

0 голосов
/ 11 июня 2009

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

0 голосов
/ 07 июня 2009

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

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

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

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

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

0 голосов
/ 06 июня 2009

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

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

0 голосов
/ 07 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...