You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MudBlazor:如何在EditForm中验证列表对象?

问题原因与解决方案

问题出在foreach循环中使用迭代变量绑定For表达式,导致Blazor的验证框架无法正确识别集合中每个元素的属性验证规则,进而跳过验证直接触发OnValidSubmit。

解决步骤

将foreach循环替换为for循环,通过索引绑定集合元素,确保验证框架能正确解析每个属性的验证规则:

@page "/ValidationTest"

@inject IDialogService DialogService

<EditForm Model="@Persons" OnValidSubmit="Send">
    @for (int i = 0; i < Persons.Length; i++)
    {
        // 捕获当前索引,避免闭包问题
        int index = i;
        <MudTextField @bind-Value="Persons[index].Name" For="@(() => Persons[index].Name)" />
    }
    <MudIconButton ButtonType="ButtonType.Submit" Icon="@Icons.Material.Filled.Send" />
</EditForm>

@code{
    class Person
    {
        [System.ComponentModel.DataAnnotations.Required]
        public string Name { get; set; } = null!;
    }

    Person[] Persons = new Person[]
    {
        new Person(), new Person()
    };

    void Send()
    {
        this.DialogService.ShowMessageBox("提示","验证通过!");
    }
}

原理说明

  • foreach中的迭代变量是循环共享的,For="@(()=>person.Name)"无法生成指向数组特定元素的属性路径,验证框架无法识别该属性的Required规则。
  • for循环通过索引访问元素,结合捕获的index变量,For="@(() => Persons[index].Name)"能生成明确的属性路径(如Persons[0].Name),验证框架会正确应用每个元素的验证规则,为空时阻止表单提交。

内容的提问来源于stack exchange,提问作者Iori Kyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:07:49