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

Razor视图中嵌套循环导致单选按钮分组失效问题

解决Razor视图中单选按钮分组失效的问题

这个问题的核心原因很清晰:单选按钮的分组完全依赖相同的name属性,你的嵌套循环里大概率是没给同一Property下的所有Option设置统一的name,导致每个单选按钮都自成一组,自然失去了互斥效果。

修正后的代码示例

我帮你调整了代码逻辑,确保同一Property下的单选按钮共享同一个name,同时兼顾多选复选框的逻辑:

@for (int i = 0; i < Model.Type.Properties.Count(); i++)
{
    var property = Model.Type.Properties[i];
    <div class="col-lg-3 col-md-4 col-sm-6">
        <strong>@property.Label</strong><br />
        @if (property.AllowMultipleSelections)
        {
            <!-- 多选:复选框,name带Property索引,支持多选值提交 -->
            @for (int j = 0; j < property.Options.Count(); j++)
            {
                var option = property.Options[j];
                <div class="form-check">
                    <input type="checkbox" class="form-check-input" 
                           name="Properties[@i].SelectedOptionIds" 
                           value="@option.Id"
                           @(option.IsSelected ? "checked" : "") />
                    <label class="form-check-label">@option.Name</label>
                </div>
            }
        }
        else
        {
            <!-- 单选:所有选项共享同一个name,确保分组互斥 -->
            @for (int j = 0; j < property.Options.Count(); j++)
            {
                var option = property.Options[j];
                <div class="form-check">
                    <input type="radio" class="form-check-input" 
                           name="Properties[@i].SelectedOptionId" 
                           value="@option.Id"
                           @(option.IsSelected ? "checked" : "") />
                    <label class="form-check-label">@option.Name</label>
                </div>
            }
        }
    </div>
}

关键说明

  1. 单选按钮的name统一:对于不允许多选的Property,所有Option的name都设为Properties[@i].SelectedOptionId(这里的i是当前Property的索引),确保同一Property下的所有单选按钮name完全一致,浏览器就会自动将它们归为一组,实现单选互斥。
  2. 模型绑定适配:如果你的后端模型是包含Properties集合的类,每个Property拥有SelectedOptionId(单选)或SelectedOptionIds(多选)属性,这样的name设置可以直接和模型绑定,提交表单时能正确获取选中的值。
  3. 避免错误的name生成:不要把Option的索引j加到单选按钮的name里,否则每个Option的name会变成Properties[i].SelectedOptionId[j],导致每个单选按钮都是独立分组——这就是你之前分组失效的主要原因。

如果你的模型结构有所不同,只需要调整name属性的格式,确保同一Property下的单选按钮name完全一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:39