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

Тег-хелпер формы

Для создания HTML-формы нужен элемент <form>. Дополним его атрибутом asp-page:

<form asp-page="Checkout">

Тем самым в конечный HTML-код добавятся атрибуты action и method:
<form action="/Checkout" method="post">

установка атрибута asp-page позволяет указать другую страницу Razor, на которую будет отправляться содержимое формы. По умолчанию для обработки формы используется та же страница, что и для отображения. Однако важно помнить, что, если убрать атрибут asp-page, то необходимо добавить атрибут method самостоятельно, иначе (по умолчанию) будет использоваться метод GET, что чревато угрозой безопасности.
Атрибут asp-page добавляется с помощью FormTagHelper, который использует использует предоставленное значение, чтобы создать URL-адрес для атрибута action с использованием функции маршрутизации.
Предположим, у нас есть страница Product.cshtml, использующая директиву @page {id}, при которой полный шаблон маршрута будет "Product/{id}". Чтобы указать значение {id}, необходимо использовать атрибут asp-route-*, где вместо звёздочки подставить имя параметра, в данном случае asp-route-id. Например, мы хотим передать значение 5:
<form asp-page="Product" asp-route-id="5">

что создаст разметку
<form action="/Product/5" method="post">

При этом можно использовать столько атрибутов asp-route-*, сколько нужно, чтобы сгенерировать правильный адрес для атрибута action. Также можно использовать атрибут asp-page-handler для указания конкретного обработчика страницы.
В тег-хелперах, как в других конструкциях Razor, можно использовать значения C#:
<form asp-page="Product" asp-route-id="@Model.ProductId">

Помимо основной задачи — создания атрибута action, тег-хелпер формы создает скрытое поле <input> для предотвращения межсайтовой подделки запросов1. Это поведение можно отключить, добавив атрибут asp-antiforgery="false".


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

Комментарии

Комментарии