Начиная с версии бета-версии ASP.NET MVC 3, вы можете добавить файл с именем _ViewStart.cshtml (или _ViewStart.vbhtml для VB) в папку \ Views вашего проекта:
Файл _ViewStart можно использовать для определения общего кода представления, который вы хотите выполнить в начале рендеринга каждого представления. Например, мы могли бы написать код в нашем файле _ViewStart.cshtml, чтобы программно установить свойство Layout для каждого представления в файл SiteLayout.cshtml по умолчанию:
Поскольку этот код выполняется в начале каждого просмотра, нам больше не нужно явно устанавливать макет в любом из наших отдельных файлов представления (кроме случаев, когда мы хотели переопределить значение по умолчанию выше).
Важно: поскольку _ViewStart.cshtml позволяет нам писать код, мы можем при желании сделать нашу логику выбора Layout более богатой, чем просто базовый набор свойств. Например: мы могли бы изменить шаблон макета, который мы используем, в зависимости от того, какой тип устройства обращается к сайту, - и иметь оптимизированный макет телефона или планшета для этих устройств, а также макет, оптимизированный для настольных компьютеров, для ПК / ноутбуков. Или, если бы мы создавали систему CMS или общее общее приложение, которое используется несколькими клиентами, мы могли бы выбирать разные макеты для использования в зависимости от клиента (или его роли) при доступе к сайту.
Это обеспечивает большую гибкость пользовательского интерфейса. Это также позволяет вам легче написать логику вида один раз и избежать повторения в нескольких местах.
ViewLocationFormats = ViewLocationFormats.Union(new string[] { "~/Inspinia/ExampleViews/{1}/{0}.cshtml" }).ToArray();
. В результате мне пришлось добавить копию моего файла _ViewStart.cshtml в «~ / Inspinia / ExampleViews», в противном случае он не был выбран и макет не был установлен._ViewStart
в каждую подпапку ссылку, которая будет ссылаться на представления в этой подпапке?В более общем смысле эта способность инфраструктуры MVC «знать» о _Viewstart.cshtml называется «Кодирование по соглашению».
Википедия
В этом нет магии. Он только что был записан в базовую кодовую базу инфраструктуры MVC и поэтому является тем, о чем MVC «знает». Вот почему вы не можете найти его в файлах .config или где-либо еще; это на самом деле в коде MVC. Однако вы можете переопределить, чтобы изменить или обнулить эти соглашения.
источник
Просто еще одна мысль.
Если вы хотите иметь свой собственный
cshtml
файл в качестве общего шаблона, вы можете сделать это следующим образомВнутри вашего
_viewstart.cshtml
вы можете упомянуть свой общийcshtml
файл.источник
Исходный код гораздо лучше, чем документация.
Ссылаясь на код MVC 6 от Github, у нас есть несколько файлов, представляющих интерес
----Обновить----
Из-за изменений в структуре источника информацию о том, как собираются страницы просмотра, теперь можно найти в RazorViewEngine.cs. ищет функцию «GetViewStartPages».
----/Обновить----
Чтобы ответить, как они вступают в игру, посмотрите на RazorView , который, как я считаю (из-за IView), связан с конвейером MVC. Этот файл имеет метод RenderAsync, который вызывается из конвейера MVC для визуализации запрошенного представления.
RenderAsync выполняет вызовы RenderPage И ТОГО RenderLayout (ЗАМЕТЬТЕ ЗАКАЗ). Сначала RenderPage выполняет вызовы для работы с файлами Viewstart (обратите внимание, что во множественном числе может быть более одного файла _viewstart).
Таким образом, запрашиваемую информацию можно получить из функции RenderViewStartAsync в файле RazorView.cs в пространстве имен Microsoft.AspNet.Mvc.Razor.
источник
Это может добавить некоторую дополнительную информацию к этому вопросу сейчас (2016 ala MVC4, MVC5).
Механизм Razor находит и запускает код в _ViewStart.cshtml перед любым другим кодом, который находится в том же каталоге или подкаталоге, где находится _ViewStart.cshtml. .
Любое представление может переопределить свойство Layout или любое из его значений.
Просто подумал, что мог бы добавить немного больше информации, чтобы показать вам, почему это _ViewStart.
Если вы получите ILSpy и изучите код в RazorViewEngine (System.Web.Mvc.dll), вы увидите, что сам код ссылается на это имя.
Вы можете видеть, что RazorViewEngine ищет файл с таким именем:
источник
Если вы хотите иметь общий макет для своих страниц, вам нужно определить общий макет и связать представление с макетом, мы должны установить свойство макета для каждого вида, это нарушает принцип СУХОЙ (не повторять себя). Для этого .Net Framework предоставляет файл "_ViewStart.cshtml", расположенный внутри папки просмотра. Мы размещаем информацию о макете в файле "_ViewStart.cshtml", и каждое представление по умолчанию использует эту информацию о макете. Если вы хотите предоставить какую-то другую информацию о макете, предположим, что на вашем домашнем экране вы можете создать новый «_ViewStart.cshtml» со ссылкой на этот макет и поместить его в папку «Home View».
источник
Краткий ответ : ViewStarts запускаются первыми, когда визуализируется любое представление. Длинная история ниже:
История создания единого файла просмотра:
Надеемся, что это заставит вас осознать, что на самом деле происходит внутри неизвестных загадок жизненного цикла вашей программы.
источник