Validation blazor页面中列表的数据注释

Validation blazor页面中列表的数据注释,validation,asp.net-core,data-annotations,blazor,blazor-server-side,Validation,Asp.net Core,Data Annotations,Blazor,Blazor Server Side,我使用以下方法对blazor(服务器)中的表单进行验证 要使验证器也在循环中工作,需要做些什么?如果这有帮助,请尝试: 添加Microsoft.AspNetCore.Components.DataAnnotations.ValidationNuGet包。 这是一个预发布包,最新版本为3.2.0-rc1.20223.4。有一个计划将其包含在本机Blazor SDK中,但该版本应该可以使用到.NET 5 用ObjectGraphDataAnnotationsValidator替换DataAnn

我使用以下方法对blazor(服务器)中的表单进行验证

要使验证器也在循环中工作,需要做些什么?

如果这有帮助,请尝试:

  • 添加
    Microsoft.AspNetCore.Components.DataAnnotations.Validation
    NuGet包。
    • 这是一个预发布包,最新版本为3.2.0-rc1.20223.4。有一个计划将其包含在本机Blazor SDK中,但该版本应该可以使用到.NET 5
  • ObjectGraphDataAnnotationsValidator替换
    DataAnnotationsValidator
    • 您可以通过步骤2检查问题是否得到解决。如果没有,请继续执行步骤3
  • 使用
    ValidateComplexType
    注释列表属性。
    • 您需要创建一个包含list属性的类
  • 查看文档以了解更多信息:


    如果您像我一样使用
    IValidatableObject
    ,上述解决方案将不起作用。解决方法是创建另一个属性来链接验证

    e、 g

    公共类MyModel:IValidatableObject
    {
    公共列表位置{get;}=new List();
    公共对象位置验证{get;}
    公共IEnumerable验证(ValidationContext ValidationContext)
    {
    var isValid=。。。;
    如果(有效)
    返回新的ValidationResult(“Places is invalid.”,new[]{nameof(PlacesValidation)});
    }
    }
    
    
    
    <EditForm Model="@place" OnValidSubmit="HandleValidSubmit" Context="placesEdit" >
    <DataAnnotationsValidator />
     <InputText @bind-Value="place.Name"/>
    <ValidationMessage For="() => place.Name" />
    </EditForm>
    @{place=new Place(); }
    
    <EditForm Model="@places" OnValidSubmit="HandleValidSubmit" Context="placesEdit" >
    <DataAnnotationsValidator />
     @foreach(var place in places) {
       <InputText @bind-Value="place.Name"/>
       <ValidationMessage For="() => place.Name" />
    }
    </EditForm>
    @{places=new List<Place>(); }