代码之家  ›  专栏  ›  技术社区  ›  Avrohom Yisroel

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

  •  0
  • Avrohom Yisroel  · 技术社区  · 4 年前

    this answer )我现在有了它,如果对model属性的验证失败,那么 <ValidationMessage>

    不过,我想要这个 <验证消息> 由HTML包围的标记,仅在显示验证消息时(即该属性验证失败时)才显示。我可以通过介绍一个私人 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。

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

    0 回复  |  直到 4 年前
        1
  •  1
  •   aryeh    4 年前

    一旦你打过电话 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