Как обновить свойства объекта, используя поля ввода с методами onchange для записи данных?

#c# #events #blazor #onchange #syncfusion

#c# #Мероприятия #blazor #onchange #syncfusion

Вопрос:

Я пытаюсь создать раздел «Редактировать» для редактирования объектов и обновления их в базе данных:

Прежде всего, я получаю текущий объект и загружаю поля ввода в зависимости от PropertyType (string = textfield, int = средство выбора номера и т.д.):

Объект:

введите описание изображения здесь

Поместите поля ввода:

 <EditForm @ref="EditForm" Model="ObjectType" novalidate>
<DataAnnotationsValidator />
@foreach (var property in EditObject.GetType().GetProperties())
{
     @if (property.PropertyType.Name.Equals("String"))
     {
           <SfTextBox Placeholder="@property.Name"
                      Type="InputType.Text"
                      @onchange="@((Microsoft.AspNetCore.Components.ChangeEventArgs __e) => property.SetValue(EditObject, __e.Value))"
                      Value="@property.GetValue(EditObject, null)"
                      CssClass="create-model-item">
           </SfTextBox>

     }
     else if (property.PropertyType.Name.Contains("Int"))
     {
             <SfNumericTextBox TValue="int?" Placeholder="Choose a Number Value="@property.GetValue(EditObject, null)" CssClass="create-model-item">
                               <NumericTextBoxEvents TValue="int?" 
                                       ValueChange="@((Syncfusion.Blazor.Inputs.ChangeEventArgs<int?> __e) => property.SetValue(EditObject, __e.Value))">
                               </NumericTextBoxEvents>
             </SfNumericTextBox>
     }
}
<SfButton OnClick="SendForm" IsPrimary="true" CssClass="mb-3">Create</SfButton>
</EditForm>
  

Теперь я хочу изменить данные свойств в «EditObject» на новые значения, которые ввел пользователь, это делается методом «onChange»:

 @onchange="@((Microsoft.AspNetCore.Components.ChangeEventArgs __e) => property.SetValue(EditObject, __e.Value))"
  

Однако это выдает мне эту ошибку:

введите описание изображения здесь

Кто-нибудь знает, что происходит не так?

Заранее спасибо!:)

Ответ №1:

Вам не нужно указывать тип события.

Ваш @onchange код необходимо изменить на @onchange="@((__e) => { property.SetValue(EditObject, __e.Value); })"

Это должно остановить ошибку.

Ответ №2:

Для компонента Textbox поддерживается двусторонняя привязка. Поэтому для обновления новых значений свойства модели не требуется никакого дополнительного метода. Если вы использовали двустороннюю привязку, она будет обновлена по умолчанию. Итак, пожалуйста, попробуйте с атрибутом @bind-Value.

Также взгляните на приведенную ниже ссылку UG.

UG ссылка:https://blazor.syncfusion.com/documentation/textbox/data-binding/#two-way-data-binding