blazor - 我们可以检查 Blazor 中哪些属性未通过验证吗?

标签 blazor

我有一个 Blazor 组件,它包含表单输入和一些额外的标记。感谢 @enet 的一些出色帮助(请参阅 this answer ),我现在有了它,如果模型属性的验证失败, <ValidationMessage>正确显示消息。

但是,我想要这个 <ValidationMessage>由 HTML 包围的标记,仅在显示验证消息时(即该属性验证失败时)出现。我可以通过引入私有(private) bool 来做到这一点,并按如下方式使用它...

    @if (_showValidationMsg) {
      <div class="input-group-append"><label class="input-group-text has-error" for="@PropertyName">
        <ValidationMessage For="@ValueExpression" /></label>
      </div>
    }

@code {
  // other stuff here as well

  private bool _showValidationMsg = false;

  private async Task OnChanged(ChangeEventArgs cea) {
    await ValueChanged.InvokeAsync(cea.Value?.ToString() ?? "");
    FieldIdentifier identifier = CascadedEditContext.Field(PropertyName);
    CascadedEditContext.NotifyFieldChanged(identifier);
    _showValidationMsg = !CascadedEditContext.Validate();
  }

}

当组件只有一个输入元素,但我的一个组件有两个输入控件,并且我想知道哪一个未通过验证,这样我就可以显示/隐藏正确的 HTML 位时,这种方法可以正常工作。

有没有办法找出哪些模型属性未通过验证?

最佳答案

一旦您调用了CascadedEditContext.Validate(您可以忽略结果,因为您不需要它,请参见下文),然后您可以使用GetValidationMessages来获取属性的验证消息。如果没有,则通过验证。

使用您的代码作为基础,您可以将其包装到可重用的方法中,如下所示...

private async Task<bool> CheckValidationFor(ChangeEventArgs cea, EventCallback<string> valueChangedEventCallback, string propertyName) {
  await valueChangedEventCallback.InvokeAsync(cea.Value?.ToString() ?? "");
  FieldIdentifier identifier = CascadedEditContext.Field(propertyName);
  CascadedEditContext.NotifyFieldChanged(identifier);
  CascadedEditContext.Validate();
  return CascadedEditContext.GetValidationMessages(identifier).Any();

}

然后您可以将 OnChanged1 代码简化为...

private async Task OnChanged1(ChangeEventArgs cea) =>
  _showValidationMsg1 = await CheckValidationFor(cea, Value1Changed, PropertyName1);

对于OnChanged2也是如此

关于blazor - 我们可以检查 Blazor 中哪些属性未通过验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65277958/

相关文章:

Blazor 按钮,使用父组件@onclick

c# - JsonSerializer.Deserialize 不填充对象内的列表

Blazor - 绑定(bind)到对象集合

javascript - Blazor Webassembly JS Interop - "Microsoft.JSInterop.JSException: Could not find ' 中的 'window' WriteCookie'。”

blazor - OnParametersSetAsync是如何执行的以及执行次数

asp.net-core - 下拉列表在 Asp.net Blazor 组件中不起作用

azure - 具有安全 Azure 功能后端的静态 blazor Web 组件

c# - Q : What is the best way to store api keys in a Blazor WASM application?

blazor - 如何使用 Blazor 调用 JQuery 函数

blazor - 非泛型方法 'HttpClient.GetAsync(string)' 不能与类型参数一起使用