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

Blazor Web Assembly表单如何绑定嵌套复杂模型?

Blazor WebAssembly 嵌套模型在EditForm中的绑定方案

直接上可落地的代码方案,包含模型定义、表单绑定、验证全流程:

1. 嵌套模型定义(带验证)

注意给主模型里的嵌套属性加[ValidateComplexType],不然嵌套模型的验证规则不会生效,同时初始化嵌套对象避免空引用:

// 嵌套模型MOD1
public class MOD1
{
    [Required(ErrorMessage = "名称不能为空")]
    public string Name { get; set; }

    [Range(18, 100, ErrorMessage = "年龄需在18-100之间")]
    public int Age { get; set; }
}

// 嵌套模型MOD2
public class MOD2
{
    [Required(ErrorMessage = "地址不能为空")]
    public string Address { get; set; }

    [Phone(ErrorMessage = "请输入有效的手机号")]
    public string Phone { get; set; }
}

// 主模型CLASS1
public class CLASS1
{
    [ValidateComplexType]
    public MOD1 MOD1 { get; set; } = new MOD1();

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

2. EditForm绑定嵌套属性

直接通过@bind-Value="Model.嵌套模型.属性名"的层级写法绑定,验证消息也可以精准定位到嵌套属性:

@page "/nested-model-form"
@using YourProjectNamespace.Models; <!-- 替换成你的模型命名空间 -->

<h3>嵌套模型表单</h3>

<EditForm Model="@formModel" OnValidSubmit="@HandleSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <!-- 绑定MOD1的属性 -->
    <div class="mb-3">
        <label class="form-label">名称:</label>
        <InputText @bind-Value="formModel.MOD1.Name" class="form-control" />
        <ValidationMessage For="@(() => formModel.MOD1.Name)" />
    </div>

    <div class="mb-3">
        <label class="form-label">年龄:</label>
        <InputNumber @bind-Value="formModel.MOD1.Age" class="form-control" />
        <ValidationMessage For="@(() => formModel.MOD1.Age)" />
    </div>

    <hr />

    <!-- 绑定MOD2的属性 -->
    <div class="mb-3">
        <label class="form-label">地址:</label>
        <InputText @bind-Value="formModel.MOD2.Address" class="form-control" />
        <ValidationMessage For="@(() => formModel.MOD2.Address)" />
    </div>

    <div class="mb-3">
        <label class="form-label">手机号:</label>
        <InputText @bind-Value="formModel.MOD2.Phone" class="form-control" />
        <ValidationMessage For="@(() => formModel.MOD2.Phone)" />
    </div>

    <button type="submit" class="btn btn-primary">提交</button>
</EditForm>

@code {
    private CLASS1 formModel = new CLASS1();

    private void HandleSubmit()
    {
        // 这里写表单提交逻辑,比如保存数据到后端
        Console.WriteLine($"名称: {formModel.MOD1.Name}, 年龄: {formModel.MOD1.Age}");
        Console.WriteLine($"地址: {formModel.MOD2.Address}, 手机号: {formModel.MOD2.Phone}");
    }
}

关键注意点

  • 嵌套属性绑定无需特殊语法,直接用层级访问即可,Blazor双向绑定完全支持
  • 必须初始化嵌套模型(= new MOD1()),否则会触发空引用异常
  • [ValidateComplexType]是嵌套模型验证生效的核心,别漏加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:15:06