Применение компонента EditForm позволяет легко добавить валидацию к форме. Для валидации данных нам нужен валидатор - объект, который определяет, как проверять корректность данных. По умолчанию фреймворк Blazor предоставляет валидатор аннотаций данных - компонент DataAnnotationsValidator, который прикрепляет к форме поддержку валидации с помощью аннотаций данных. Как и в целом в .NET, аннотации данных в виде атрибутов позволяют установить правила валидации свойств модели.
Пусть у нас в проекте есть класс Person, который представляет данные, и два компонента - App и Home:
Пусть класс Person применяет атрибуты валидации:
using System.ComponentModel.DataAnnotations; public class Person { [Required] [StringLength(20, MinimumLength =2)] public string? Name { get; set; } [Required] [Range(1,110)] public int Age { get; set; } }
В данном случае класс Person определяет два свойства - Name и Age. Оба этих свойства обязательно должны иметь некоторое значение, для чего к ним применяется атриубут
[Required]
. Кроме того, размер строки в Name должен содержать от 2 до 20 символов (атрибут [StringLength(20, MinimumLength =2)]
),
а свойство Age может иметь значение от 1 до 110 (атрибут [Range(1,110)]
)
В Blazor мы можем использовать все те атрибуты валидации, что и в целом в .NET - Атрибуты валидации в .NET
Пусть компонент App представляет корневой компонент и просто выводит на страницу компонент Home:
@page "/" <!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <Home /> <script src="_framework/blazor.web.js"></script> </body> </html>
А в компоненте Home определим следующий код:
@using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Forms @rendermode RenderMode.InteractiveServer <EditForm Model="@person" OnSubmit="Submit"> <DataAnnotationsValidator /> <ValidationSummary /> <p> Name:<br /> <InputText id="name" @bind-Value="person.Name" /> </p> <p> Age:<br /> <InputNumber id="age" @bind-Value="person.Age" /> </p> <button type="submit">Submit</button> </EditForm> <h3>@message</h3> @code { string message = ""; Person person = new(); void Submit() { message = $"Name: {person.Name}; Age: {person.Age}"; } }
Форма привязана к объекту person
. Для валидации этих данных этого объекта в начале формы определяется компонент <DataAnnotationsValidator>
.
Далее для вывода ошибок определяется встроенный компонент <ValidationSummary>
При вводе некорректных данных в компоненте ValidationSummary отобразятся сообщения о некорректном вводе:
Стоит отметить, что даже при некорректном вводе мы можем нажать на кнопку отправки, и обработчик OnSubmit также будет выполняться.
С помошью свойства ErrorMessage можно настроить сообщение об ошибке, чтобы уйти от англоязычных стандартизированых сообщений:
using System.ComponentModel.DataAnnotations; public class Person { [Required (ErrorMessage="Необходимо ввести имя")] [StringLength(20, MinimumLength =2, ErrorMessage = "Длина имени должна быть от {2} до {1} символов")] public string? Name { get; set; } [Required (ErrorMessage = "Необходимо ввести возраст")] [Range(1,110, ErrorMessage = "Возраст должен находиться в диапазоне от {1} до {2}")] public int Age { get; set; } }
Через плейсхолдеры {1}
и {2}
в сообщениях об оишбках можно получить значения свойств атрибутов (минимальное и максимальное значения). Соответственно
теперь сообщения об ошибках будут выглядить иначе.
Как можно увидеть на скриншоте, для свойства Age также выводится некоторое сообщение о неудачном парсинге в тип int
. Подобные сообщения также применяются
при ошибке парсинга в тип DateTime (компонент InputDate) и такие сообщения устанавливаются не в атрибутах валидации, а с помощью свойства ParsingErrorMessage. Например, изменим поле ввода возраста:
<p> Age:<br /> <InputNumber id="age" @bind-Value="person.Age" ParsingErrorMessage="Введите число" /> </p>
Теперь сообщение об ошибке парсинга задается с помощью атрибута ParsingErrorMessage
: