Как указать стандартную LayoutPage в Razor в ASP.NET MVC 3 Preview 1? - PullRequest
25 голосов
/ 24 августа 2010

Я хочу указать (в одном месте) страницу макета по умолчанию в Razor, чтобы я мог удалить это:

@{ LayoutPage = "~/Views/Shared/_Layout.cshtml"; }

из каждого файла .cshtml, который у меня есть. Но я не знаю как ... Есть идеи? Я использую движок Razor из ASP.NET MVC 3 Preview 1.

Ответы [ 3 ]

68 голосов
/ 06 января 2011

Создайте страницу "~ / Views / _ViewStart.cshtml" и следующее внутри:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

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

Теперь он создается по умолчанию в пустом проекте MVC3.

Источник

2 голосов
/ 24 августа 2010

Похоже, что сделать это можно с помощью файла _init.cshtml в корне каталога представления, в котором вы хотите использовать общий элемент страницы (заголовок).Когда механизм представления Razor создает вашу страницу, он ищет несколько конкретных файлов, которые автоматически называются _start.cshtml, _init.cshtml и _end.cshtml;эти файлы загружаются в соответствующем порядке движком представления для каждого запроса.Размещение в этих файлах определения LayoutPage и / или других распространенных операций инициализации обеспечит их выполнение для всех страниц.

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

Более подробную информацию о том, как это сделать, можно найти в инструкции по Microsoft по созданию страниц с помощью Razor.Я нашел раздел Запуск кода до и после файлов в папке на стр. 169. Проверьте эту страницу загрузки Microsoft для полной книги, а также для дополнительных примеров Razor.

0 голосов
/ 24 августа 2010

Нет простого способа сделать это в MVC 3 Preview 1. Это ограничение битов предварительного просмотра, которые будут рассмотрены в следующих выпусках.К сожалению, _init.cshtml файлы не работают в этом предварительном просмотре MVC3, поэтому вы не можете следовать шаблону веб-страниц.

Есть два способа заставить его работать (хотя ни один из них не оптимален)

  1. написать свой собственный базовый класс страницы, который наследуется от WebViewPage и устанавливает правильный Layout в конструкторе ... но в этом случае вам придется указывать директиву @inherits в каждом представлении.
  2. установите переопределение макета в вашем методе действия (используя переопределение View(string viewName, string masterName)).Вы можете написать промежуточный базовый класс контроллера, который будет иметь вспомогательный метод, чтобы избавить себя от необходимости повторять макет везде.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...