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