Содержание
Как и в случае с html-хэлперами, среди tag-хэлперов можно выделить отдельную группу хэлперов которые можно использовать для разработки веб-форм. Tag-хэлперы элементов форм позволяют создать различные html-элементы и передавать значения параметров в созданную форму. С такими хэлперами мы уже встречались во введении к этой части. Здесь мы рассмотрим эти хэлперы более подробно.
Tag-хэлпер FormTagHelper
Хэлпер FormTagHelper
представлен html-тэгом <form>
и позволяет определить в представлении ASP.NET Core MVC веб-форму. Этот tag-хэлпер может принимать следующие атрибуты:
Атрибут | Описание |
asp-controller |
указывает на контроллер, которому предназначен запрос |
asp-action |
указывает на действие контроллера |
asp-area |
указывает на область, в которой будет вызываться контроллер для обработки формы |
asp-antiforgery |
если имеет значение true , то для этой формы будет генерироваться antiforgery token |
asp-route |
указывает на название маршрута |
asp-all-route-data |
устанавливает набор значений для параметров |
asp-route-[название параметра] |
определяет значение для определенного параметра |
asp-page |
указывает на страницу RazorPage, которая будет обрабатывать запрос |
asp-page-handler |
указывает на обработчик страницы RazorPage, который применяется для обработки запроса |
asp-fragment |
указывает фрагмент, который добавляется к запрашиваемому адресу после символа # |
С использованием большинства этих атрибутов мы уже знакомы по работе с tag-хэлпером AnchorTagHelper
, поэтому, повторно рассматривать их действие мы не будем. Единственный атрибут, действие которого можно продемонстрировать — это asp-antiforgery
, который позволяет сгенерировать для формы antiforgery token. Например,
<form asp-action="Add" asp-controller="Home" asp-antiforgery="true"> //тут элементы формы </form>
сформирует следующую веб-форму:
<form action="/Home/Add" method="post"> //тут элементы формы <input name="__RequestVerificationToken" type="hidden" value="CfDJ8HsyHGkNz6JCiBgY5Sb3r9Qk0p-d4u6k1XVUPmgPZklYPjAQUKkmxODU9P4qEAWjV8aUThqdbHh80izRo26oQS4Rnvyqit759yYlFQ2ivexF_KM7xlDny8rWb8gweUmfhTO1zpE1ix-43-2dyLnPqnQ" /> </form>
следует отметить, что по умолчанию, значение для этого атрибута равно true, поэтому имеет смысл его использовать только в том случае, если генерация токена вам не требуется, передав в качестве значения атрибута false
. Теперь рассмотрим tag-хэлперы отдельных элементов веб-форм.
Атрибут asp-for
Все рассмотренные ниже tag-хэлперы, используемые в формах, имеют один общий атрибут asp-for
, указывающий свойство модели создается элемент.
Создание формы с использованием tag-хэлперов
Чтобы продемонстрировать создание формы с использованием tag-хэлперов, рассмотрим следующую модель для которой будет создаваться форма:
public enum PostType { Draft = 1, Note = 2, Article = 3 } public class Post { public DateTime CreateAt { get; set; } public int Id { get; set; } public string Title { get; set; } public string Author { get; set; } public string Body { get; set; } public PostType PostType { get; set; }; }
InputTagHelper
InputTagHelper
создает поле ввода. Для нашей модели мы должны создать поля ввода даты создания, заголовка, и автора. Создавать форму будем в представлении Views/Home/Index.cshtml:
@model Post @{ ViewData["Title"] = "Home Page"; } <form asp-action="Add" asp-controller="Home" asp-antiforgery="false"> <input asp-for="CreateAt" type="date"/> <br/> <input name='title' id="title" asp-for="Title" /><br /> <input name='author' id="author" asp-for="Author" /><br /> </form>
Здесь, для каждого элемента мы указали значение атрибута asp-for
, передав в него название свойства модели, к которому будет относится элемент формы. В Visual Studio для этого можно воспользоваться списком:
Также, стоит обратить внимание на первый элемент input
для которого указан дополнительный атрибут type
, указывающий на тип значения:
<input asp-for="CreateAt" type="date"/>
в данном случае, поле будет использоваться для ввода даты. Также, этот атрибут может принимать следующие значения:
Тип .NET | Значение атрибута type |
---|---|
Bool |
type="checkbox" |
String |
type="text" |
DateTime |
type="datetime-local" |
Byte |
type="number" |
Int |
type="number" |
Single, Double |
type="number" |
Кроме перечисленных в таблице наиболее часто используемых значений, также есть и более «специфические» значения. Например, мы можем создать вот такое поле ввода:
<input asp-for="Color" type="color"/>
Что позволит сгенерировать вот такой элемент в представлении:
Теперь вернемся к нашей форме. На данный момент мы сформировали следующие элементы:
Добавим к каждому элементу соответствующие метки:
LabelTagHelper
Tag-хэлпер LabelTagHelper
используется для тега label
и создаёт метку для какого-либо поля. Для нашей формы мы можем использовать этот хэлпер следующим образом:
<form asp-action="Add" asp-controller="Home" asp-antiforgery="false"> <label asp-for="CreateAt"></label><br /> <input asp-for="CreateAt" type="date"/> <br/> <label asp-for="Title"></label><br /> <input name='title' id="title" asp-for="Title" /><br/> <label asp-for="Author"></label><br /> <input name='author' id="author" asp-for="Author" /><br/> </form>
В результате сформируется следующая форма:
<label asp-for="CreateAt">Дата создания</label><br />
или же, воспользоваться уже известными нам атрибутами для аннотации данных:
public class Post { [DisplayName("Дата создания")] public DateTime CreateAt { get; set; } public int Id { get; set; } [DisplayName("Заголовок")] public string Title { get; set; } [DisplayName("Автор")] public string Author { get; set; } [DisplayName("Содержание")] public string Body { get; set; } [DisplayName("Тип")] public PostType PostType { get; set; } }
в этом случае, текст меток для уже созданных нами элементов будет выглядеть следующим образом:
TextAreaTagHelper
TextAreaTagHelper
используется для создания многострочного текстового поля textarea
. Это поле мы можем использовать для свойства Body
нашей модели:
<textarea asp-for="Body"></textarea>
в результате, наша форма примет следующий вид (с учётом написанного ранее кода):
SelectTagHelper
SelectTagHelper
создает элемент списка. Этот элемент мы можем применить к свойству PostType
нашей модели, которое представлено типом enum PostType
. Для создания списка выбора мы должны определить у этого tag-хэлпера значение атрибута asp-items
. Для начала, немного дополним тип PostType
аннотациями:
using System.ComponentModel.DataAnnotations; namespace AspTagHelpers.Models { public enum PostType { [Display(Name = "Черновик")] Draft = 1, [Display(Name = "Заметка")] Note = 2, [Display(Name = "Статья")] Article = 3 } }
так как атрибут DisplayName
не может применяться к элементам перечислений, то в данном случае, мы подключили пространство имен System.ComponentModel.DataAnnotations и используем атрибут Display
в параметре Name
которого передаем значение имени. Теперь перейдем в представление и добавим список выбора следующим образом:
<label asp-for="PostType"></label><br /> <select asp-for="PostType" asp-items="@Html.GetEnumSelectList(typeof(PostType))"></select><br />
Так как атрибут asp-items
принимает значение IEnumerable<SelectListItem>
, то для создания такой коллекции мы воспользовались методом Html.GetEnumSelectList()
, передав в этот метод в качестве параметра тип перечисления. В результате, наша форма примет следующий внешний вид:
При необходимости, мы можем вручную добавлять элементы списка, например, для того, чтобы указать значение по умолчанию:
<select asp-for="PostType" asp-items="@Html.GetEnumSelectList(typeof(PostType))"> <option selected="selected" disabled="disabled">Выберите тип записи</option> </select><br />
Итого
Сегодня мы рассмотрели использование tag-хэлперов для создания веб-форм в ASP.NET Core MVC на примере конкретной модели данных. Tag-хэлперы позволяют создавать различные элементы форм и при этом делать это в достаточно удобной форме — практически используя известные названия html-элементов.