Orchard CMS передает данные из макета просмотра в тему - PullRequest
1 голос
/ 06 февраля 2012

Я пишу пользовательский модуль Orchard с пользовательской темой. Я хотел бы передать данные из представления обратно в макет, чтобы изменить макет на основе данных, определенных в представлении.

В моем примере у меня есть левая навигация в моей теме - определенные представления должны быть в состоянии указать макету не отображать эту левую навигацию.

В стандартном mvc 3 я просто передавал бы значение через ViewBag, но это не работает в Orchard - я предполагаю, что код макета выполняется перед визуализацией View?

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

Какова лучшая практика для передачи данных в качестве альтернативы ViewBag?

Обновление: После того, как я немного поигрался с этим, я только что заметил, что TempData выбирается в Layout - может кто-нибудь объяснить, почему TempData передается, а ViewData нет? И это безопасно использовать от Orchard POV?

1 Ответ

3 голосов
/ 06 февраля 2012

Это проще, чем это ... Все шаблоны имеют доступ к форме Layout, которая является динамическим объектом. Это означает, что вы можете изменить его на лету, добавить его свойства и т. Д. В вашем конкретном случае, подавляя зону, вы даже можете просто установить для нее значение null: зоны - это просто фигуры, а в случае зон верхнего уровня - это расширения в макете. Так что, если у вас есть зона с именем Foo, установка Layout.Foo в ноль должна помочь. Фактически, я делаю именно это в одной из моих тем, чтобы подавить боковые панели на моих страницах ошибок без необходимости создавать определенный слой виджета:

Layout.AsideFirst = null;
Layout.AsideSecond = null;
...