Подтвердить что ты не робот

Как указать default LayoutPage в Razor в ASP.NET MVC 3 Preview 1?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Источник

Ответ 3

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

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

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