Представления в ASP.NET Core MVC. Использование макетов

Макеты (или мастер-страницы, layuot) в ASP.NET Core MVC используются для создания единообразного вида всего приложения. Обычно, в макете содержится всё, что повторяется от страницы к странице — скрипты, css, «скелет» html-страницы и т.д. Также, в зависимости от сложности нашего приложения, мы можем создавать несколько макетов, например, для отображения данных пользователю, для администрирования приложения и т.д.

Макет в ASP.NET Core MVC

Макет — этот тот же самый файл *.cshtml, который обычно располагается в папке View/Shared и начинается с символа подчеркивания, например, _Layout.cshtml. Символ нижнего подчеркивания необязательный, но использовать его рекомендуется, чтобы указать, что перед нами специальный файл. Посмотрим, как выглядит типичный макет в ASP.NET Core MVC. Для этого, воспользуемся нашим приложением с записями блога из предыдущей части. Создадим в папке View/Shared файл _AdminLayout.cshtml:

В редакторе кода мы увидим следующее содержимое файла:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        @RenderBody()
    </div>
</body>
</html>

Код макета — это, по сути, полноценная веб-страница: здесь определены основные теги <html>, <head>, <body> и так далее. Также макет может использовать конструкции Razor. Например в этом выражении: @ViewBag.Title из каждого отдельного представления будет передаваться значение для заголовка веб-страницы.

Главное отличие макета от обычных представлений состоит в использовании метода @RenderBody(). На место этого вызова будут подставляться другие представления, использующие макет. Таким образом, мы можем обеспечить единообразное отображение различных представлений. Добавим для этого макета следующим код:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <h2>@ViewBag.Title</h2>
    <div><a href="/Admin/Index">Записи</a> | <a href="/Admin/Users">Пользователи</a></div>
    <div>
        @RenderBody()
    </div>
</body>
</html>

здесь стоит обратить внимание на определение ссылок, а, точнее, на их атрибуты href:

<div><a href="/Admin/Index">Записи</a> | <a href="/Admin/Users">Пользователи</a></div>

так как мы используем маршрутизацию по умолчанию, то нетрудно понять, что при переходе, например, по ссылке /Admin/Index должно выполнять действие Index() контроллера AdminController, которого пока нет в нашем приложении. Создадим такой контроллер в нашем приложении и определим в нем необходимые действия:

public class AdminController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Users()
    {
        return View();
    }
}

Теперь создадим необходимые представления, которые будут использовать наш макет. Первое представление (Index.cshtml):

@{
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
    ViewBag.Title = "Записи блога";
}
<h2>Все записи блога</h2>

<button>Добавить новую</button>

Второе представление (Users.cshtml)

@{
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
    ViewBag.Title = "Пользователи";
}
<h2>Пользователи блога</h2>

<button>Добавить пользователя</button>

В итоге, структура проекта будет выглядеть следующим образом:

В созданных представлениях стоит обратить внимание на следующую строку кода:

Layout = "~/Views/Shared/_AdminLayout.cshtml";

Таким образом мы указываем макет, который будет использоваться представлением. Теперь все готово для проверки работы приложения. Вот как будет выглядеть приложение после перехода по пути /admin

переход по ссылке «Пользователи»

При необходимости, мы можем подключить в макет css-файлы, скрипты и т.д.

Итого

Макеты позволяют создать единообразие в вашем приложении. Обычно, в макеты включаются элементы, которые должны повторяться на всех страницах приложения. По сути, макет — это представление в котором обязательно определяется метод RenderBody() на место которого вставляется представление, переданное из контроллера.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии