Применение паттерна MVC к Razor Pages¶
Как уже обсуждалось, в Razor Pages используется шаблон MVC. Однако, помимо этого, в ASP.NET Core есть фреймворк ASP.NET Core MVC. Razor Pages построен поверх него. Впрочем, при желании можно совсем отказаться от Razor Pages и использовать ASP.NET Core MVC непосредственно.
Как мы уже видели, конечные точки Razor Page реализуются, используя комбинацию RoutingMiddleware и EndpointMiddleware.
Маршрутизация запроса на страницу Razor и создание модели привязки¶
Первый шаг обработки запроса — маршрутизация к соответствующему обработчику страницы Razor. Снова обратимся к странице списка дел с категориями. Пусть мы просматриваем список элементов с категорией Simple, и, соответственно, делаем запрос по пути /category/Simple.
Маршрутизация берет заголовки и путь запроса (/category/Simple) и сопоставляет их с предварительно зарегистрированным списком паттернов. Каждый из них соответствует пути к одной странице Razor и обработчику страницы.
После выбора обработчика страницы создается модель привязки (если она применима). Эта модель построена на основе входящего запроса, свойств PageModel, отмеченных для привязки, и параметров метода, нужных обработчику страницы. В данном случае — простая строка category, указанная в пути запроса.

Выполнение обработчика с использованием модели приложения¶
Роль обработчика страницы как контроллера в паттерне MVC заключается в координации генерации ответа на запрос, который он обрабатывает. В частности, он должен:
- убедиться в валидности данных из модели привязки;
- вызвать соответствующие действия в модели приложения, используя сервисы;
- выбрать соответствующий ответ для генерации на основе ответа модели приложения.
Здесь под понятием модель приложения понимается абстрактная концепция, инкапсулирующая части приложения, не относящиеся к пользовательскому интерфейсу. В частности, в ней содержится модель предметной области, сервисы и взаимодействие с БД.

В нашем примере вызывается одна точка модели приложения.
Генерация HTML-кода с использованием модели представления¶
Для генерации ответа нам нужно зафиксировать необходимые детали в модели представления. В ASP.NET Core MVC модель представления — это объект, передающийся в представление Razor для отрисовки. В Razor Pages представление Razor может обращаться к соответсвующему классу PageModel, при этом доступ к данным осуществляется через свойства класса.
Важно отметить, что обработчик страницы не контролирует, какой HTML-код генерируется. Это решает представление.

Собираем всё вместе: полный запрос страницы Razor¶
Вот как объединяются шаги для обработки запроса на отображение списка дел из категории Simple.

Ключевым преимуществом такого процесса является разделение ответственности:
- представление отвечает только за генерацию HTML-кода и получение некоторых данных;
- модель приложения отвечает за выполнение необходимой бизнес-логики;
- обработчик страницы (контроллер) отвечает только за проверку входящего запроса и выбор ответа на основе выходных данных модели приложения.
Дата создания : 21 сентября 2022 г.