Blazor:OnSubmit:如何访问表单输入值并显示 ValidationMessage?

Blazor: OnSubmit: How to access form input values and show ValidationMessage?

我知道当使用 OnSubmit 处理表单提交时(而不是 OnValidSubmitOnInvalidSubmit)我们有责任确保表单有效(通过调用 EditContext.Validate() 方法);

考虑以下示例代码:

<EditForm Model=@Person OnSubmit=@FormSubmitted>
  <DataAnnotationsValidator/>
  <ValidationSummary/>
  <div class="form-group">
    <label for="Name">Name</label>
    <InputText @bind-Value=Person.Name class="form-control" id="Name" />
    <ValidationMessage For="() => Person.Name"/>
  </div>
  <input type="submit" class="btn btn-primary" value="Save"/>
</EditForm>

现在假设我们在 FormSubmitted 函数中: 我的问题是:

  1. 我们如何访问 from 的输入值? (在上面的代码中,使用 ID 访问 InputText 的值:"Name")(数据绑定是唯一的方法吗?)
  2. 由于我们负责验证表单,显示 ValidationMessage 的唯一方法是调用 EditContext.Validate() 方法(如果表单确实无效)或者我们可以决定并控制哪个ValidationMessage 出现?

1) 是的,模型绑定是可行的方法 2)验证消息本身来自数据模型中的数据注释

您遇到的问题是因为到 EditContext.Validate returns 时,验证已经发生,并且正在显示验证消息。不幸的是,您对此无能为力,尤其是因为您无法访问和操作存储这些消息的 ValidationMessageStore 对象。 Steve Anderson 告诉我,如果有更多人(除了我)提出要求,将会提供这样的功能。我告诉他这个功能非常重要……那是几个月前的事了,你不是第一个表明这个功能必不可少的人。您可以转到 github 和 post 一个问题,请求提供此功能。

但是,如果您认为您不能忍受同时显示所有验证消息(有些人可能会说这是可取的),我想您可以实现 ValidationMessage 组件以仅显示内容你想要的。

如果我是你,我不会那样做。通常更希望显示所有需要填写的字段的消息,我猜想当用户单击提交按钮时,他们通常会填写大部分字段。

希望这对您有所帮助...