Файл _ViewImports.cshtml позволяет по умолчанию подключить в представления некоторый функционал. Сначала рассмотрим ситуацию, с которой мы можем столкнуться. Пусть у нас в проекте есть некоторый класс Person:
namespace MvcApp { public record class Person(string Name, int Age); }
Допустим, мы хотим использовать тип Person в представлении Index.cshtml:
@using MvcApp @* Подключаем пространство имен класса Person *@ @{ Layout = null; Person tom = new Person("Tom", 37); } <h2>Person Data</h2> <h3>Name: @tom.Name</h3> <h3>Age: @tom.Age</h3>
Чтобы использовать тип Person в представлении, мы вынуждены импортировать с помощью директивы using
пространство имен, где этот тип определен.
В данном случае ничего сложного нет, однако если у нас куча представлений, где мы хотим использовать этот же тип Person, то мы будем вынуждены определить
то же самое выражение импорта во всех представлениях. Это может создавать некоторые неудобства. Во-первых, мы повторяем один и тот же код. Во-вторых,
если пространство имен изменится, то мы вынуждены будем менять все представления. В-третьих, возможно, мы захотим подключить еще какие-то пространства имен, что
увеличит работу, если будут какие-то изменения. Файл _ViewImports.cshtml решает эту проблему
Итак, добавим в проект в папку Views файл _ViewImports.cshtml. Для его добавления в Visual Studio можно применять шаблон Razor View Imports:
Далее добавим в этот файл подключение пространства имен класса Person:
@using MvcApp @* Подключаем пространство имен класса Person *@
В этом случае функциональность пространства имен MvcApp
будет автоматически подключаться во все представления.
И тогда мы можем убрать из представления Index.cshtml подключение пространства имен:
@{ Layout = null; Person tom = new Person("Tom", 37); } <h2>Person Data</h2> <h3>Name: @tom.Name</h3> <h3>Age: @tom.Age</h3>
Для каждой группы представлений в одной папке мы можем определить свой файл _ViewImports.cshtml. Например, если мы хотим отдельно подключать ряд пространств имен в только в представления контроллера HomeController, тогда нам надо добавить файл _ViewImports.cshtml в каталог Views/Home:
И в этмо случае все директивы и выражения из файла Views/Home/_ViewImports.cshtml будут применяться к представлениям только из папки Views/Home. Кроме того, ко всем представлениям во всех папках продолжит применяться глобальный файл Views/_ViewImports.cshtml