0

所以,我有一个 blazor EditForm,我将模型传递给它。

让我们假设我有一个带有 Id 名称和年龄的 Person 类

public class Person{

    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }
}

我创建一个人的实例(虚拟)并将其传递给 EditForm

<EditForm Model="Dummy" OnValidSubmit="HandleValidSubmit">
...
</EditForm>

@code{
    private void HandleValidSubmit()
    {
        //handle form submit
    }
}

所以,我想 EditForm 不是直接修改类的原始实例(Dummy),因为它需要首先验证,所以对象的所有提交逻辑(我想是副本)需要由我在 HandleSubmit 上编写方法,还是我错过了什么?

在这种情况下,我如何实际确认 HandleSubmit 方法对原始模型的编辑?我不能只做 Dummy(Original) = Dummy(???)

4

2 回答 2

2

在表单验证数据之前,处理程序存储所有将输入映射到模型的数据,因此您只需调用例如:

private void HandleValidSubmit()
{
    var user = _userService.GetByName(Dummy.Name)
}

或者只是您可以在任何地方使用 Dummy,它具有来自表格的数据映射

于 2022-03-03T11:02:00.020 回答
0

它会更新您传递给它的模型。但是除了做一些解析验证的数字和日期时间之外,不要单独进行任何验证。要进行验证,您应该在类定义中使用例如DataAnnotationValidator组件和数据注释验证属性。当您插入更新的数据模型对象并按下提交按钮时,它首先通过调用 EditContext.Validate 检查验证状态,然后如果它返回 true,则调用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 组件

于 2022-03-04T22:22:06.233 回答