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

Blazor组件中单选按钮值无法保存至Student类的问题

Blazor单选按钮值无法保存至模型的解决方案

针对InputRadioGroup的修复方案

你的第一种实现问题核心在于重复设置name属性以及可能的模型初始化缺失:

  1. 移除InputRadio上的name属性,InputRadioGroup会自动管理子元素的name,重复设置会干扰Blazor的绑定逻辑
  2. 必须在组件中初始化Student实例,避免空引用导致绑定失效
  3. 确保Value类型与模型属性类型严格匹配(当前模型用string类型,所以字符串值"1""0"是匹配的)

修复后的代码:

<EditForm Model="@student" OnValidSubmit="@Submit" FormName="Students" id="studentsForm">
    <InputRadioGroup @bind-Value="student.AlternanzaAziendale">
        <div class="form-check form-check-inline">
            <InputRadio Value="1" class="form-check-input" id="alternanzaAziendale1"/>
            <label class="form-check-label" for="alternanzaAziendale1">是</label>
        </div>
        <div class="form-check form-check-inline">
            <InputRadio Value="0" class="form-check-input" id="alternanzaAziendale2" />
            <label class="form-check-label" for="alternanzaAziendale2">否</label>
        </div>
    </InputRadioGroup>
    <button type="submit">提交</button>
</EditForm>

@code {
    private Student student = new Student(); // 必须初始化实例

    private void Submit()
    {
        // 此处可正常获取student.AlternanzaAziendale的值
    }

    public class Student
    {
        [Required(ErrorMessage = "Seleziona se hai fatto alternanza in azienda")]
        public string AlternanzaAziendale { get; set; }
        public string TempoEsteroFamiglia { get; set; }
    }
}

针对原生radio按钮的修复方案

第二种实现中,直接用@onchange赋值未触发EditForm的模型状态更新,推荐改用Blazor双向绑定或手动触发状态变更:

方案1:使用双向绑定(最简单)

<EditForm Model="@student" OnValidSubmit="@Submit" FormName="Students" id="studentsForm">
    <div class="right-side">
        <div class="form-check form-check-inline">
            <input @bind="student.TempoEsteroFamiglia" class="form-check-input" type="radio" name="TempoEsteroFamiglia" id="TempoEsteroFamigliaY" value="1">
            <label class="form-check-label" for="TempoEsteroFamigliaY">是</label>
        </div>
        <div class="form-check form-check-inline">
            <input @bind="student.TempoEsteroFamiglia" class="form-check-input" type="radio" name="TempoEsteroFamiglia" id="TempoEsteroFamigliaN" value="0">
            <label class="form-check-label" for="TempoEsteroFamigliaN">否</label>
        </div>
    </div>
    <button type="submit">提交</button>
</EditForm>

方案2:手动触发状态更新(若坚持用@onchange)

@implements IDisposable

<EditForm Model="@student" OnValidSubmit="@Submit" FormName="Students" id="studentsForm">
    <div class="right-side">
        <div class="form-check form-check-inline">
            <input @onchange="@(() => UpdateEsteroFamiglia("1"))" class="form-check-input" type="radio" name="TempoEsteroFamiglia" id="TempoEsteroFamigliaY">
        </div>
        <div class="form-check form-check-inline">
            <input @onchange="@(() => UpdateEsteroFamiglia("0"))" class="form-check-input" type="radio" name="TempoEsteroFamiglia" id="TempoEsteroFamigliaN">
        </div>
    </div>
</EditForm>

@code {
    private Student student = new Student();
    private EditContext? _editContext;

    protected override void OnInitialized()
    {
        _editContext = new EditContext(student);
        base.OnInitialized();
    }

    private void UpdateEsteroFamiglia(string value)
    {
        student.TempoEsteroFamiglia = value;
        _editContext?.NotifyFieldChanged(FieldIdentifier.Create(() => student.TempoEsteroFamiglia));
    }

    private void Submit()
    {
        // 处理提交逻辑
    }

    public void Dispose()
    {
        // 清理资源
    }
}

额外排查点

  • 暂时移除Blazor Bootstrap引用,测试原生Blazor组件是否正常,排查组件冲突问题
  • 检查浏览器控制台是否存在JS错误,确认Blazor绑定脚本正常加载
  • 确认.NET 8渲染模式(Server/WebAssembly)无特殊配置影响绑定逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:01:22