Компонент EditForm

Последнее обновление: 30.11.2023

Для оформления всех элементов ввода в одну форму и упрощения валидации применяется компонент EditForm. Фактически он рендерится в элемент <form>

Класс EditForm предоставляет следующие свойства:

  • AdditionalAttributes: коллекция дополнительных атрибутов, которые применяются к форме

  • ChildContent: вложенное содержимое - набор компонентов ввода и элементов html

  • EditContext: контекст редактирования - по сути те данные, для работы с которыми применяется форма

  • Model: объект, привязанный к форме. Это свойство и EditContext - взаимоисключающиеся, нам нало установить только одно из этих свойств, поскольку если установлено свойство Model, то EditContext создается на основе значения свойства Model

  • OnInvalidSubmit: метод-обработчик, который вызывается при отправке формы, если данные EditContext не проходят ввалидацию

  • OnSubmit: метод-обработчик, который вызывается при отправке формы (нажатии на кнопку типа submit)

  • OnValidSubmit: метод-обработчик, который вызывается при отправке формы, если данные EditContext проходят ввалидацию

Основная задача EditForm обеспечить валидацию введенных данных. Пример компонента, который использует EditForm:

@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Forms
@rendermode RenderMode.InteractiveServer

<EditForm Model="@person" OnSubmit="Submit">
    <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 {
    Person person = new();
    string message = "";

    void Submit()
    {
        message = $"Name: {person.Name} Age: {person.Age}";
    }

    public class Person
    {
        public string Name { get; set; } = "";
        public int Age { get; set; }
    }
}

Здесь данные представлены классом Person, который определяется в коде компонента App и имеет два свойства. В коде компонента App также определяется объект класса Person. Этот объект выступает в качестве модели формы EditForm - для этого установлено свойство Model:

<EditForm Model="@person" 

А поля ввода формы привязаны к свойствам объекта Person.

Кроме того, у EditForm установлен обработчик нажатия кнопки - метод Submit(), который выводит данные объекта Person на страницу.

EditForm и создание формы в компонентах Blazor на C#

EditContext

Вместо установки свойства Model у формы EditForm также можно использовать свойство EditContext, которое принимает объект одноименного типа EditContext и которое устанавливает констект формы. Например:

@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Forms
@rendermode RenderMode.InteractiveServer

<EditForm EditContext="editContext" OnSubmit="Submit">
    <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();
    EditContext? editContext;

    protected override void OnInitialized()
    {
        editContext = new(person);
    }


    void Submit()
    {
        message = $"Name: {person.Name} Age: {person.Age}";
    }

    public class Person
    {
        public string Name { get; set; } = "";
        public int Age { get; set; }
    }
}

Для установки объекта EditContext у класса EditForm применяется одноименное свойство

<EditForm EditContext="editContext"

Стоит отметить, что если у EditForm устанавливается свойство EditContext, то свойство Model устанавливать не надо.

Здесь объект EditContext создается в методе OnInitialized(), который вызывается при инициализации компонента:

Person person = new();
EditContext? editContext;

protected override void OnInitialized()
{
    editContext = new(person);
}

В конструктор EditContext передается отслеживаемый объект - здесь объект Person (это может быть объет любого типа). В итоге результат работы приложения будет тот же, что и при использовании свойства Model. Стоит также отметить, что у EditContext есть свойство Model, через которое можно получить отслеживаемую модель. Например:

void Submit()
{
    // преобразуем editContext.Model в тип Person
    if(editContext!=null && editContext.Model is Person p)
        message = $"Name: {p.Name} Age: {p.Age}";
}

Оба свойства - и Model, и EditContext применяются прежде всего для валидации данных, что будет рассмотрено в последующих статьях. Основная разница между ними, что EditContext позволяет настроить некоторые моменты валидации, что может потребоваться в некоторых сценариях.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850