Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
По умолчанию проект ASP.NET Core по типу Web Application содержит в папке Views такой файл как _ViewImports.cshtml.
Он имеет по умолчанию следующее содержимое:
@using MvcViewsApp @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Здесь используются только директивы синтаксиса Razor. Первая строка добавляет функциональность пространства имен MvcViewsApp (то есть текущего проекта).
Вторая строка добавляет функциональность встроенных tag-хелперов из пространства имен Microsoft.AspNetCore.Mvc.TagHelpers
. Про tag-хелперы
далее рассказывается более подробно. Сейчас же нас интересует прежде всего первая строка.
Если мы хотим использовать в представлении какие-то типы, то мы должны указывать их с полным названием пространства имен.
Например, добавим в проект новую папку Models и определим в ней новый класс Phone:
namespace MvcViewsApp.Models { public class Phone { public string Title { get; set; } public string Company { get; set; } public int Price { get; set; } } }
Допустим, мы хотим использовать тип Phone в представлении Index.cshtml:
@using MvcViewsApp.Models @{ Phone phone = new Phone { Title = "iPhone 7", Company = "Apple", Price = 56000 }; } <p>@phone.Title</p>
Чтобы использовать тип Phone в представлении, мы вынуждены импортировать с помощью директивы using
пространство имен, где этот тип определен.
В данном случае ничего сложного нет, однако если у нас куча представлений, где мы хотим использовать этот же тип Phone, то мы будем вынуждены определить
то же самое выражение импорта во всех представениях. Это может создавать некоторые неудобства. Во-первых, мы повторяем один и тот же код. Во-вторых,
если пространство имен изменится, то мы вынуждены будем менять все представления. В-третьих, возможно, мы захотим подключить еще какие-то пространства имен, что
увеличит работу, если будут какие-то изменения.
Файл _ViewImports.cshtml решает эту проблему. В частности, добавим в него подключение пространства имен RazorApp.Models
:
@using MvcViewsApp @using MvcViewsApp.Models @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
В этом случае функциональность MvcViewsApp.Models
будет автоматически подключаться во все представления.
Для каждой группы представлений в одной папке мы можем определить свой файл _ViewImports.cshtml. Так пускай, в проекте будет добавлен новый контроллер OtherController, в папке Views для его представлений будет добавлена подпапка Other:
В эту папку Views/Other добавим новый файл _ViewImports.cshtml. Для его добавления можно выбрать спецальный шаблон:
И теперь все директивы и выражения из файла Views/Other/_ViewImports.cshtml будут применяться к представлениям только из папки Views/Other. Кроме того, ко всем представлениям во всех папках продолжит применяться глобальный файл Views/_ViewImports.cshtml