Я хочу указать (в одном месте) страницу макета по умолчанию в Razor, чтобы я мог удалить это:
@{ LayoutPage = "~/Views/Shared/_Layout.cshtml"; }
из каждого файла .cshtml, который у меня есть. Но я не знаю как ... Есть идеи? Я использую движок Razor из ASP.NET MVC 3 Preview 1.
В MVC 3 Preview 1 нет простого способа сделать это. Это ограничение битов предварительного просмотра, которое будет исправлено в следующих выпусках. К сожалению, файлы _init.cshtml
не работают в этой предварительной версии MVC3, поэтому вы не можете следовать шаблону веб-страниц.
Я могу придумать два способа заставить его работать (хотя ни один из них не является оптимальным)
@inherits
в каждом представлении. View(string viewName, string masterName)
). Вы можете написать базовый класс промежуточного контроллера, который будет иметь вспомогательный метод, чтобы избавить себя от повторения макета повсюду. Похоже, это можно сделать с помощью файла _init.cshtml в корне каталога представления, в котором вы хотели бы разместить общий элемент страницы (заголовок). Когда механизм просмотра Razor создает вашу страницу, он ищет несколько определенных файлов, которые автоматически называются _start.cshtml, _init.cshtml и _end.cshtml; эти файлы загружаются в соответствующем порядке механизмом представления для каждого запроса. Размещение определения LayoutPage и/или других распространенных операций инициализации в этих файлах гарантирует их выполнение для всех страниц.
Примечание: я не уверен, передается ли эффект в подкаталоги, поскольку это неясно из документации; вам придется попробовать и узнать.
Более подробную информацию о том, как это сделать, можно найти в руководстве Microsoft по созданию страниц с помощью Razor. Я нашел раздел Выполнение кода до и после файлов в папке на странице 169. Полную книгу и дополнительные образцы Razor можно найти на этой странице загрузки Microsoft.