DataAnnotationsValidator 不适用于 Blazor 中的复合模型

DataAnnotationsValidator not working for Composite model in Blazor

<DataAnnotationsValidator /> 不适用于我在剃须刀页面中使用的复合模型 TradeViewModel。 有什么办法解决吗?

剃须刀代码:

  <EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset">
        <ObjectGraphDataAnnotationsValidator />
       
         <div class="form-row">
         <div class="form-group col">
         <label>Name</label>
                      
         <InputText @bind-Value="@trade.invitedName" class="form-control" />
         <ValidationMessage For="@(() => trade.invitedName)" />
         </div>
         <div class="form-group col">
         <label>Email</label>              
         <InputText @bind-Value="@trade.invitedEmail" class="form-control" />
         <ValidationMessage For="@(() => trade.invitedEmail)" />
         </div>
         </div>
 </EditForm>

假设 inviteName 和 invitedEmail 是不同的模型。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
      public class ModelA
        {
            [Required(ErrorMessage = "The  Name is mandatory")]
            public string invitedName { get; set; }
        }
    
     public class ModelB
        {
            [Required(ErrorMessage = "The  Email is mandatory")]
            public string invitedEmail { get; set; }
        }

复合模型:

    public class TradeViewModel
    {
            [ValidateComplexType]
            public ModelA ModelA { get; set; }
            [ValidateComplexType]
            public ModelB ModelB { get; set; }
    }

我尝试使用 ValidateComplex 类型方法,但我的代码无法识别它。安装的软件包。 Microsoft.AspNetCore.Components.DataAnnotations.Validation

对于复杂模型,请使用 <ObjectGraphDataAnnotationsValidator />

而不是 <DataAnnotationsValidator />

所以,代码如下

<EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset">
   <ObjectGraphDataAnnotationsValidator /> // modify this line <DataAnnotationsValidator />
   
     <div class="form-row">
     <div class="form-group col">
     <label>Name</label>
                  
     <InputText @bind-Value="@trade.invitedName" class="form-control" />
     <ValidationMessage For="@(() => trade.invitedName)" />
     </div>
     <div class="form-group col">
     <label>Email</label>              
     <InputText @bind-Value="@trade.invitedEmail" class="form-control" />
     <ValidationMessage For="@(() => trade.invitedEmail)" />
     </div>
     </div>
 </EditForm>

当我将 Microsoft.AspNetCore.Blazor.DataAnnotations.Validation 包正确安装到项目中时,它对我有用。

我遇到了同样的问题,我找到了使用

的解决方案

[ValidateComplexType] 属性子 属性 级别和 ObjectGraphDataAnnotationsValidator 组件。

作为 post 中的状态 Blazor EditForm Validation not working when using Child Component

public class Starship
{
    ...

    [ValidateComplexType]
    public ShipDescription ShipDescription { get; set; } = 
        new ShipDescription();

    ...
}

   <EditForm Model="@myModel" OnValidSubmit="@HandleValidSubmit">

        <ObjectGraphDataAnnotationsValidator/>
        <ValidationSummary />