Когда мы создаем новое приложение 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 обычно включаются такие повторяющиеся элементы, как импорт пространств имен, типов моделей (если модель используется в большинстве представлений).




