Blazor 的 EditForm 如何处理传递给它的模型的状态?
How does the EditForm for Blazor handle the state of the model passed to it?
所以,我有一个 blazor EditForm,我向它传递了一个模型。
假设我有一个人 class 有一个 Id 一个名字和一个年龄
public class Person{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
我创建了一个 Person 的实例 (Dummy) 并将其传递给 EditForm
<EditForm Model="Dummy" OnValidSubmit="HandleValidSubmit">
...
</EditForm>
@code{
private void HandleValidSubmit()
{
//handle form submit
}
}
所以,我想 EditForm 不会直接修改 class (Dummy) 的原始实例,因为它需要首先验证,所以对象的所有提交逻辑(我想是副本)需要我在 HandleSubmit 方法上编写,还是我遗漏了什么?
在这种情况下,我如何实际确认在 HandleSubmit 方法上对原始模型所做的编辑?我不能只做 Dummy(Original) = Dummy(???)
在表单验证数据之前,处理程序会存储所有将输入映射到您的模型的数据,因此您只需调用例如:
private void HandleValidSubmit()
{
var user = _userService.GetByName(Dummy.Name)
}
或者你可以在任何地方使用 Dummy,它映射了 Form 中的数据
它会更新您传递给它的模型。但是除了进行一些解析验证的数字和日期时间之外,不要单独进行任何验证。要进行验证,您应该在 class 定义中使用例如 DataAnnotationValidator
组件和数据注释验证属性。
当您插入更新的数据模型对象并按下提交按钮时,它首先通过调用 EditContext.Validate 检查验证状态,然后如果 return 为真,则调用 OnValidSubmit
。准确地说,它执行以下操作:
private async Task HandleSubmitAsync()
{
Debug.Assert(_editContext != null);
if (OnSubmit.HasDelegate)
{
// When using OnSubmit, the developer takes control of the validation lifecycle
await OnSubmit.InvokeAsync(_editContext);
}
else
{
// Otherwise, the system implicitly runs validation on form submission
var isValid = _editContext.Validate(); // This will likely become ValidateAsync later
if (isValid && OnValidSubmit.HasDelegate)
{
await OnValidSubmit.InvokeAsync(_editContext);
}
if (!isValid && OnInvalidSubmit.HasDelegate)
{
await OnInvalidSubmit.InvokeAsync(_editContext);
}
}
}
您可能知道 .NET Core 是一个开源项目,您可以在此处查看其源代码:
EditForm Component
所以,我有一个 blazor EditForm,我向它传递了一个模型。
假设我有一个人 class 有一个 Id 一个名字和一个年龄
public class Person{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
我创建了一个 Person 的实例 (Dummy) 并将其传递给 EditForm
<EditForm Model="Dummy" OnValidSubmit="HandleValidSubmit">
...
</EditForm>
@code{
private void HandleValidSubmit()
{
//handle form submit
}
}
所以,我想 EditForm 不会直接修改 class (Dummy) 的原始实例,因为它需要首先验证,所以对象的所有提交逻辑(我想是副本)需要我在 HandleSubmit 方法上编写,还是我遗漏了什么?
在这种情况下,我如何实际确认在 HandleSubmit 方法上对原始模型所做的编辑?我不能只做 Dummy(Original) = Dummy(???)
在表单验证数据之前,处理程序会存储所有将输入映射到您的模型的数据,因此您只需调用例如:
private void HandleValidSubmit()
{
var user = _userService.GetByName(Dummy.Name)
}
或者你可以在任何地方使用 Dummy,它映射了 Form 中的数据
它会更新您传递给它的模型。但是除了进行一些解析验证的数字和日期时间之外,不要单独进行任何验证。要进行验证,您应该在 class 定义中使用例如 DataAnnotationValidator
组件和数据注释验证属性。
当您插入更新的数据模型对象并按下提交按钮时,它首先通过调用 EditContext.Validate 检查验证状态,然后如果 return 为真,则调用 OnValidSubmit
。准确地说,它执行以下操作:
private async Task HandleSubmitAsync()
{
Debug.Assert(_editContext != null);
if (OnSubmit.HasDelegate)
{
// When using OnSubmit, the developer takes control of the validation lifecycle
await OnSubmit.InvokeAsync(_editContext);
}
else
{
// Otherwise, the system implicitly runs validation on form submission
var isValid = _editContext.Validate(); // This will likely become ValidateAsync later
if (isValid && OnValidSubmit.HasDelegate)
{
await OnValidSubmit.InvokeAsync(_editContext);
}
if (!isValid && OnInvalidSubmit.HasDelegate)
{
await OnInvalidSubmit.InvokeAsync(_editContext);
}
}
}
您可能知道 .NET Core 是一个开源项目,您可以在此处查看其源代码: EditForm Component