Почему есть _ViewStart и _ViewImports?Почему не один файл? - PullRequest
0 голосов
/ 02 декабря 2018

В ASP.NET Core MVC мы можем поместить файл с точным именем _ViewStart.cshtml в папку, содержащую общий код C #, который будет запускаться перед каждым просмотром / страницей бритвы в этой папке.Примерно так:

@{
    const string SomeConstant = "some value";
}

Аналогичным образом, файл с точным именем _ViewImports.cshtml внутри папки может содержать все общие директивы бритвы, которые должны быть общими для видов / страниц бритвы в этой папке.Вот так:

@layout _Layout
@using MyApp.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Но вот вопрос, который я не смог найти в Google, независимо от того, как я его перефразировал:

Может кто-нибудь объяснить, почему у нас есть оба _ViewStart.cshtmlи _ViewImports.cshtml для определения общего кода и директив?Почему эти функции (которые, кажется, не конфликтуют друг с другом) не определены в одном файле ?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Код, который необходимо выполнить перед каждой страницей, должен быть помещен в файл _ViewStart.cshtml.

Для _ViewImport.cshtml - содержимое этого файла применяется ко всем файлам, присутствующим в одной и той же папке и подпапке.

Итак, _ViewStart - это исполнение, тогда как _ViewImport применяет свое содержимое к каждому файлу.

TEST1 Размещение как ссылки "Layout [ Correct ]", так и оператора using[Неправильно] "в _ViewStart выдаст ошибку компилятора.

TEST2 Размещение и ссылки" Layout [InCorrect] "и", используя оператор [ Correct ] "at _ViewImport не будет применять _Layout к другим страницам

Согласно MSDN ViewImport Поддержка следующих директив

@ addTagHelper, @removeTagHelper: allrun, по порядку.

@ tagHelperPrefix: ближайший к представлению переопределяет любые другие

@ model: ближайший к представлению переопределяет любые другие

@ наследует:ближайший к тон просматривает все остальные

@ используя: все включено;дубликаты игнорируются

@ inject: для каждого свойства ближайший к представлению переопределяет все остальные с тем же именем свойства

0 голосов
/ 14 января 2019

Файл _ViewStart

Используется для настройки общей памяти (общедоступных статических переменных) во всех файлах просмотра.

Например, обычной практикой для ViewStart является установка значения по умолчанию, которое можно переопределить для Layout и ViewData / ViewBag словарь.

Файл _ViewImports

В этом файле вы можете суммировать (абстрагировать) все выражения, которые вы обычно используете во всех ваших представлениях.

Зачем использовать файл _ViewImports для обычного «использования директив» вместо ViewStart?

Поскольку использование директив имеет область действия тела текущего файла представления.Таким образом, размещение операторов @using внутри файла ViewStart не сделает их доступными для любого другого файла представления, кроме тела самого файла viewStart.Следовательно, поставляется специальный файл ViewImports, который предназначен для этой цели расширения области действия операторов @using и других полезных вещей, таких как помощник по тегам, который без этого специального файла будет повторяться внутри каждого файла представления, который нарушает СУХОЙ (не повторяйся) принцип .

...