Содержание
В предыдущей части мы в общих чертах познакомились с тем, как организована работа с формами в Blazor. При работе с компонентом EditForm мы можем также использовать специальные компоненты Blazor представляющие собой текстовые поля, поля ввода чисел и так далее, которые также позволяют работать с формами в Blazor более комфортно.
Компоненты Blazor для ввода данных в формах являются наследниками компонента InputBase<T>. У этого компонента объявлены такие свойства как Value, которое позволяет производить двухстороннее связывание, Display — позволяет задать имя компонента, которое будет использовано при выводе сообщение об ошибках валидации. Все потомки InputBase<T>поддерживают произвольные html-атрибуты, поэтому, в случае необходимости, мы можем воспользоваться, например, bootstrap, чтобы сделать форму более привлекательной. На данный момент в .NET 6 используются следующие компоненты ввода для форм в Blazor:
| Компонент ввода | Вид в Html-документе |
|---|---|
InputCheckbox |
<input type="checkbox"> |
InputDate<TValue> |
<input type="date"> |
InputFile |
<input type="file"> |
InputNumber<TValue> |
<input type="number"> |
InputRadio<TValue> |
<input type="radio"> |
InputRadioGroup<TValue> |
Группа дочернего элемента InputRadio<TValue> |
InputSelect<TValue> |
<select> |
InputText |
<input> |
InputTextArea |
<textarea> |
Компонент InputText
Компонент используется для ввода текста (string). С этим компонентом мы познакомились в предыдущей статье:
<EditForm Model="person" OnSubmit="OnSubmit">
...
<InputText @bind-Value="person.Name" id="personName"></InputText>
...
</EditForm>
здесь значение InputText связано со свойством Name объекта Person. Так как InputText, как и его предок, поддерживает произвольные html-атрибуты, то этот же компонент можно использовать и для задания пользователем пароля:
<InputText type="password" @bind-Value="person.Password"></InputText>
да и, в принципе, практически любых типов ввода согласно стандарту W3.
Компонент InputNumber
Компонент используется для ввода чисел следующих типов: Int32, Int64, Int16 , Single , Double, Decimal.
Дополнительным свойство этого компонента является свойство Parsing , которое возвращает или задает сообщение об ошибке, используемое при отображении ошибки синтаксического анализа. Например, посмотрим как будет использоваться это свойство в нашей форме из прошлой статьи:
@using System.ComponentModel.DataAnnotations
<PageTitle>Index</PageTitle>
<EditForm Model="person">
<DataAnnotationsValidator />
<ValidationSummary />
<label for="personName">
Введите имя
<InputText @bind-Value="person.Name" id="personName" DisplayName="Имя"></InputText>
</label>
<br/>
<label for="personAge">
Введите возраст
<InputNumber @bind-Value="person.Age" ParsingErrorMessage="Вводите целые только числа"></InputNumber>
</label>
<br/>
<button type="submit">Отправить</button>
</EditForm>
@code
{
public class PersonModel
{
[Required]
[StringLength(50, MinimumLength = 2, ErrorMessage = "Длина строки с именем должна быть не менее 2х и не более 50ти символов")]
public string Name { get; set; }
public int Age { get; set; }
}
PersonModel person = new PersonModel();
}
Теперь запустим приложение и попробуем ввести в поле «Возраст», например, значение 12,3.
Так как поле InputNumber связано со свойством типа int, то при попытке отправить форму, содержащую число с плавающей точкой (запятой) мы получаем ошибку парсинга. При этом, если необходимо, то мы можем связать компонент InputNumber со свойством другого числового типа:
<EditForm Model="person">
...
<InputNumber @bind-Value="person.Height" ParsingErrorMessage="Ошибка парсинга"></InputNumber>
...
</EditForm>
@code
{
public class PersonModel
{
....
public double Height { get; set; }
}
Компонент InputCheckbox
Компонент для ввода значений типа bool. Например,
....
<InputCheckbox @bind-Value="person.SomeBoolValue"></InputCheckbox>
....
</EditForm>
@code
{
public class PersonModel
{
....
public bool SomeBoolValue { get; set;}
}
PersonModel person = new PersonModel();
}
Этот компонент не поддерживает nullable-тип. Например, следующие код приведет к ошибке:
....
<InputCheckbox @bind-Value="person.SomeBoolValue"></InputCheckbox>
....
</EditForm>
@code
{
public class PersonModel
{
....
public bool? SomeBoolValue { get; set;}
}
Компонент InputDate
Компонент для ввода значений даты/времени. Например,
....
<InputDate @bind-Value="person.Birthday"></InputDate>
....
</EditForm>
@code
{
public class PersonModel
{
....
public DateTime Birthday { get; set; }
}
}
Компонент поддерживает также новые типы данных для работы с датой и временем — DateOnly и TimeOnly.
По умолчанию, компонент используется для ввода даты, однако, мы можем указать другой тип данных, например, время:
<InputDate Type="InputDateType.Time" @bind-Value="person.SomeTimeValue"></InputDate>
Перечисление InputDateType содержит следующие значения:
Date |
0 | Позволяет пользователю ввести дату. |
DateTimeLocal |
1 | Позволяет пользователю вводить дату и время. |
Month |
2 | Позволяет пользователю ввести месяц и год. |
Time |
3 | Позволяет пользователю вводить время. |
Применение стиля к элементам формы
По умолчанию, к компонентам формы не применяются никакие стили, поэтому, если создать, например, вот такую форму:
<EditForm Model="person">
<InputText @bind-Value="@person.Name"></InputText>
<InputNumber @bind-Value="@person.Age"></InputNumber>
</EditForm>
@code
{
private Person person = new();
}
то на экране увидим стандартные компоненты html:
в Blazor по умолчанию используется фреймворк Bootstrap. Чтобы компоненты формы получили стиль из Bootstap, им необходимо определить свойство class следующим образом:
<EditForm Model="person">
<InputText class="form-control" @bind-Value="@person.Name"></InputText>
<InputNumber class="form-control" @bind-Value="@person.Age"></InputNumber>
</EditForm>
В этом случае компоненты получат стиль Bootstrap и станут выглядеть следующим образом:
чтобы компоненты не «наезжали» друг на друга здесь уже будет необходимо использовать позиционирование элементов с помощью контейнеров или сеток Bootstrap. О том, как использовать сетки Bootstrap можно почитать здесь.
Итого
Сегодня мы рассмотрели некоторые компоненты ввода для формы в Blazor и их основные свойства. В следующей части мы продолжим рассмотрение компонентов Blazor и рассмотрим такие компоненты как InputRadio, InputSelect и InputTextArea.


