4.2. Специальные файлы _ViewStart

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

Это можно избежать, потому что перед тем, как отрендерить cshtml файл фреймворк ищет в папке файл _ViewStart.cshtml и выполняет его код. Если в текущей папке он не найден, то его ищут в папке выше.

Давайте создадим такой файл в папке Views. Кликните правой кнопкой по Views и выберите создание нового файла. В качестве шаблона можно выбрать RazorPage, главное дать файлу имя _ViewStart.cshtml:

В моем случае шаблон стал причиной создания файла с таким содержимым:

@page
@{
}

Первую строку надо удалить, потому что данный файл не является страницей и если ее оставить, то приложение не запуститься. А дальше идет просто открытие и закрытие блока кода. И вот в него как раз можно поместить включение шаблона. То есть файл может выглядеть так:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

В файле Index.cshtml подключение шаблона уже больше не нужно, его оттуда убираем.

Теперь абсолютно все файлы представлений, которые мы будет отображать, по умолчанию будут использовать шаблон _Layout.cshtml. Попробуйте запустить приложение и убедится в этом.

Обратите внимание, что я говорю «по умолчанию», потому что мы создали файл _ViewStart.cshtml в корне Views. Если создать такой же файл в папке razortest и в нем прописать другой шаблон _CoolLayout.cshtml, то все представления из папки razortest будут использовать именно _CoolLayout.

В файле представления вы все еще можете указывать шаблоны, как мы это делали в прошлой главе и это имеет самый высокий приоритет, потому что вы как бы перезаписываете значение, которое было прописано во _ViewStart. То есть если вы хотите использовать в одном единственном представлении какой-то уникальный шаблон, то его можно указать непосредственно в cshtml файле. Например, файл Views/razortest/Index.cshtml может выглядеть так:

@model MyWebSite.Model.Person

@{
    ViewBag.Title = "This is my index page";
    Layout = "~/Views/Shared/_Layout1.cshtml";
}
. . . 
. . . 

За счет того, что у нас шаблон по умолчанию указан в самом корне и все страницы по умолчанию отображаются с использованием этого шаблона, возникает вопрос – а как отобразить представление без шаблона? Его можно просто обнулить в файле представление, присвоив null в Layout. Например, файл Views/razortest/Index.cshtml может выглядеть так:

@model MyWebSite.Model.Person

@{
    ViewBag.Title = "This is my index page";
    Layout = "~/Views/Shared/_Layout1.cshtml";
}
. . . 
. . . 

Скачать исходники этого примера Здесь

Предыдущая глава

4.1. Макеты Layout в .NET Core

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне