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

MVC Razor中为首个radio输入项设置checked属性不生效问题

失效原因

原写法不生效核心是两点:

  • checked是HTML布尔属性,只要标签上带这个属性,不管值写什么,浏览器都会认为单选项是选中状态,你用三元表达式返回空字符串的写法,没法让Razor正确控制这个属性的存在/移除
  • 你用了asp-for="SelectedAddress"标签助手,标签助手会优先根据绑定的SelectedAddress字段值来设置选中状态,手动拼接的checked属性会被标签助手的默认渲染逻辑覆盖
可用实现方案

方案1:通过绑定值自动设置选中(推荐)

这是最符合ASP.NET Core MVC绑定逻辑的写法,完全不需要手动维护firstItem变量,也不用拼接checked属性,标签助手会自动完成选中状态渲染,后续表单提交也不会出现选中值和绑定字段不一致的问题:

@{
    // 页面初始化时如果没有预设选中地址,默认选中第一个地址
    if (Model.userAddresses != null && Model.userAddresses.Any() && Model.SelectedAddress == default)
    {
        Model.SelectedAddress = Model.userAddresses.First().Id;
    }
}
@foreach (var item in Model.userAddresses)
{
    <div>
        <div class="d-lg-inline-block">
            <input asp-for="SelectedAddress" type="radio" value="@item.Id" /> @item.FullAddress<br />
        </div>
    </div>
}

方案2:手动条件渲染checked属性

如果不想修改绑定字段值,可以直接通过Razor条件块输出完整checked属性,只有条件成立时才会把属性加到标签上,不会出现空属性占位的问题:

@{ 
    bool firstItem = true;
}
@foreach (var item in Model.userAddresses)
{
    <div>
        <div class="d-lg-inline-block">
            <input asp-for="SelectedAddress" type="radio" value="@item.Id" @if(firstItem){ <text>checked="checked"</text> } />
            @item.FullAddress<br />
        </div>
    </div>
    firstItem = false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:54:25