子组件列表的Blazor验证

子组件列表的Blazor验证,blazor,blazor-server-side,blazor-validation,Blazor,Blazor Server Side,Blazor Validation,我试图用Blazor中的子组件列表来实现ObjectGraphDataAnnotationsValidator。动物列表绑定在一个表单中,由for循环呈现。子类的属性之一是必需的。 代码如下: Test.razor @using System.ComponentModel.DataAnnotations @page "/Test" @code { public class MyClass { public MyClass()

我试图用Blazor中的子组件列表来实现ObjectGraphDataAnnotationsValidator。
动物列表
绑定在一个表单中,由for循环呈现。子类的属性之一是必需的。 代码如下:

Test.razor

@using System.ComponentModel.DataAnnotations
@page  "/Test"
@code {
    public class MyClass
    {
        public MyClass()
        {
            Animals = new List<AnimalItem>();
        }
        [Required]
        public string FormName { get; set; }
        public IList<AnimalItem> Animals { get; set; }
    }

    public class AnimalItem
    {
        [Required]
        public string Name { get; set; }
    }

    protected override async Task OnInitializedAsync()
    {
        MyFormData = new MyClass()
        {
            Animals = new List<AnimalItem>()
            {
                new AnimalItem { Name = "Fuffy" },
                new AnimalItem { Name = "Flaffy" }
            }
        };
        await base.OnInitializedAsync();
    }

    public MyClass MyFormData { get; set; }

    private void OnValidSubmit()
    {
    }
}

<EditForm Model="MyFormData" OnValidSubmit="@OnValidSubmit" >
    <ObjectGraphDataAnnotationsValidator />
    <ValidationSummary /> 
    <InputText type="text" @bind-Value="MyFormData.FormName"/>
    @foreach (var animal in MyFormData.Animals)
    {
        <Animal AnimalItem="animal"></Animal>
    }
    <button type="submit">Post</button>
</EditForm>
@code {
    [Parameter]
    public Test.AnimalItem AnimalItem { get; set; }
}
<label for="Animal">Animal</label>
<InputText  id="Animal" type="text" @bind-Value="@AnimalItem.Name" />
当我编辑“组件”列表并清除“名称”字段时,表单会正确地通知我需要“名称”属性。但是,如果我按下提交按钮,这并不阻止我保存它。 我做错了什么?欢迎提供有关如何在Blazor中调试验证的任何建议:)


谢谢

我想你可能需要在
MyClass

公共类MyClass
{
公共MyClass()
{

Animals=new List

您不需要在当前示例中实现ObjectGraphDataAnnotationsValidator。@很抱歉,我错过了您的评论。您的意思是什么?如果没有
ObjectGraphDataAnnotationsValidator
,只有顶层是Validate,这意味着您的代码永远无法工作。我编辑了答案,因为该属性需要在co上运行llection属性。非常感谢您指导我找到解决方案!没问题。:-)