Файл _ViewImports.cshtml

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 13.03.2017

По умолчанию проект ASP.NET Core по типу Web Application содержит в папке Views такой файл как _ViewImports.cshtml.

_ViewImports.cshtml в ASP.NET Core

Он имеет по умолчанию следующее содержимое:

@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; }
    }
}
Подключение типов в представление в ASP.NET Core MVC

Допустим, мы хотим использовать тип 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:

ViewImport in ASP.NET Core MVC

В эту папку Views/Other добавим новый файл _ViewImports.cshtml. Для его добавления можно выбрать спецальный шаблон:

ViewImport Template in ASP.NET Core

И теперь все директивы и выражения из файла Views/Other/_ViewImports.cshtml будут применяться к представлениям только из папки Views/Other. Кроме того, ко всем представлениям во всех папках продолжит применяться глобальный файл Views/_ViewImports.cshtml

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850