Когда мы создаем новое приложение ASP.NET Core MVC, то, по умолчанию, в папке Views содержатся два файла — это файлы _ViewStart.cshtml
и _ViewImports.cshtml
. В целом, наше приложение может обходиться и без этих файлов, но их использование помогает нам сделать код приложения более лаконичным. Для чего необходимы эти файлы — разберемся далее.
Файл _ViewStart.cshtml
Код, который должен выполняться перед каждым представлением, должен быть помещен в файл _ViewStart.cshtml
. По соглашению, _ViewStart.cshtml
находится в папке Views. Операторы, перечисленные в файле _ViewStart.cshtml
, выполняются перед каждым представлением. Например, если открыть этот файл в приложении ASP.NET Core MVC, то мы увидим следующий код:
@{ Layout = "_Layout.cshtml"; }
Это означает, что для каждого представления будет применяться сначала макет _Layout.cshtml
и далее будет выполняться код, находящийся в самом представлении. Файлы_ViewStart.cshtml
являются иерархическими. Это означает, что, если _ViewStart.cshtml
определен в папке представления Views/Page, то он будет выполняться после того, как выполнится файл, находящийся в корневой папке Views
Чтобы продемонстрировать как работает файл _ViewStart.cshtml
воспользуемся приложением, которое мы разработали в предыдущей части. У нас получилась следующая структура проекта:
Изменим структуру проекта следующим образом:
1. Перенесем _AdminLayout
в папку Views/Admin
2. Добавим в папку Views/Admin файл _ViewStart.cshtml
со следующим содержанием:
@{ Layout = "_AdminLayout.cshtml"; }
У вас должна получиться следующая структура проекта:
Теперь изменим код представлений Admin/Index.cshtml
и Admin/Users.cshtml
следующим образом:
@{ //Layout = "~/Views/Shared/_AdminLayout.cshtml"; ViewBag.Title = "Записи блога"; } <h2>Все записи блога</h2> <button>Добавить новую</button>
то есть, уберем указание на то, какой макет следует использовать представлению. Теперь можно запустить приложение и убедиться, что макет _AdminLayout.cshtml
применяется только для представлений, которые возвращаются контроллером AdminController
:
Файл _ViewImports.cshtml
Директивы Razor, используемые несколькими представлениями, можно указать в общем файле _ViewImports.cshtml
. Например, если открыть файл _ViewImports.cshtml
, созданный по умолчанию, то мы можем увидеть там ряд директив Razor, отвечающих за импорт пространств имен в представление:
@using AspViews @using AspViews.Models
Если мы знаем, например, что во всем (или в большинстве частей) приложении необходимо будет использование классы из пространства имен System.Diagnostics
, то мы можем включить в файл _ViewImports.cshtml
следующую директиву:
@using System.Diagnostics
и теперь в любом представлении мы можем использовать классы System.Diagnostics
без подключения этого пространства имен в каждое представление, например:
@{ //Layout = "~/Views/Shared/_AdminLayout.cshtml"; ViewBag.Title = "Записи блога"; Stopwatch cs = Stopwatch.StartNew(); } <h2>Все записи блога</h2> <button>Добавить новую</button> <br> @cs.Elapsed;
Как и _ViewStart.cshtml
файл _ViewImports.cshtml
выполняется иерархически — вначале выполняются директивы из файла в корне папки Views и, затем, из подпапок.
Итого
Файлы _ViewStart.cshtml
и _ViewImports.cshtml
позволяют сократить код представлений и вынести некоторые повторяющиеся части приложения отдельно. Директивы из файла _ViewStart.cshtml
выполняются перед каждым представлением, что позволяет, например, для отдельной группы представлений установить свой макет. В файл _ViewImports.cshtml
обычно включаются такие повторяющиеся элементы, как импорт пространств имен, типов моделей (если модель используется в большинстве представлений).