Перейти к содержанию

Создание ответов при помощи Razor Pages

Когда приложение ASP.NET Core получает запрос, он проходит через конвейер промежуточного ПО до тех пор, пока компонент не может его обработать. Обычно последняя часть конвейера — это компонент конечной точки.
Сначала компонент маршрутизации определяет, исходя из пути URL-запроса, какую страницу Razor вызывать, отмечает выбранную страницу в HttpContext и передает дальше по конвейеру. В конце концов запрос достигает компонента конечной точки, который выполняет выбранную страницу для генерации HTML-ответа, и отправляет его обратно в браузер.

Создание HTML с помощью Razor Pages

Страницы Razor хранятся в файлах с расширением .cshtml в папке Pages проекта. Как правило, компонент маршрутизации сопоставляет пути URL-адресов запросов с одной страницей Razor, выполняя поиск страницы с таким же путем в папке Pages. Например, путь /Privacy соответствует странице Privacy.cshtml. Вот ее листинг:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p>Use this page to detail your site's privacy policy.</p>

Здесь:

  • @page — директива, сообщающая, что данный файл есть страница Razor.
  • @model PrivacyModel — модель, с которой работает страница. Унаследована от PageModel. Класс лежит в файле Privacy.cshtml.cs
  • @{/*код на C#*/} — здесь можно писать код, который будет выполнен, но не записан в ответном HTML. В данном случае мы записываем строку Privacy Policy в словарь ViewData по ключу Title
  • <h1>@ViewData["Title"]</h1> — Записываем значение ключа Title внутри тега <h1>
  • <p>...</p> — некий статический HTML, который будет выведен “как есть”.

Для формирования полной страницы, используется сочетание HTML-кода макета страницы с полученным из выбранного шаблона кодом страницы.

Логика обработки запросов с помощью PageModels и обработчиков

Большинство страниц Razor имеют связанную модель страницы. Обычно она помещается в файл %имя_страницы%.cshtml.cs. Этот класс должен наследоваться от PageModel и обычно содержит один или несколько методов, называемых обработчиками страниц. Они определяют, как обрабатывать запросы к странице Razor. Расмотрим код PrivacyModel:

public class PrivacyModel : PageModel
{
    private readonly ILogger<PrivacyModel> _logger;
    public PrivacyModel(ILogger<PrivacyModel> logger)
    {
        _logger = logger;
    }
    public void OnGet()
    {
    }
}

Здесь важно упомянуть два момента:

  • обработчики страниц управляются соглашением: именуются согласно HTTP-методу, на который они отвечают и возвращают либо void, либо (как мы увидим впоследствии) IActionResult;
  • модели страниц могут использовать внедрение зависимостей.

Здесь только один обработчик OnGet(), возвращающий void. Это значит, что он будет вызван на GET-запрос страницы Privacy и результатом выполнения этого запроса станет сформированная согласно шаблону HTML-страница.


Последнее обновление : 6 апреля 2023 г.
Дата создания : 19 сентября 2022 г.

Комментарии

Комментарии