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

.NET Core中Radio Button绑定Bool值异常,如何正确创建单选按钮?

解决单选按钮绑定ShipViaDetails.IsDefault属性失败的问题

问题原因

你当前的单选按钮将name设为IsDefault,提交时只会发送选中项的ShipCode字符串,但ASP.NET模型绑定无法将这个字符串自动映射到ShipViaDetails集合中对应实例的布尔类型IsDefault属性,导致赋值失败。

解决方案(推荐方案)

通过单选按钮传递选中的ShipCode,在控制器中手动对应设置IsDefault属性,具体调整如下:

  1. 修改前端单选按钮代码
    将单选按钮的name改为DefaultShipCode,保持value为ShipCode,确保单选按钮组互斥:
<td>
    <input type="radio"
           name="DefaultShipCode"
           value="@svias.ShipViaAccesses[i].ShipCode"
           @(svias.ShipViaAccesses[i].IsDefault ? "checked" : "")
           hx-post="@url"
           hx-trigger="change"
           hx-target="this" />
</td>
  1. 控制器中处理赋值逻辑
    在接收请求的Action中,通过DefaultShipCode参数找到对应的ShipViaDetails实例,设置其IsDefault为true,其余实例设为false:
[HttpPost]
public IActionResult SetDefaultShipVia(string defaultShipCode, List<ShipViaDetails> shipViaAccesses)
{
    foreach (var shipVia in shipViaAccesses)
    {
        shipVia.IsDefault = shipVia.ShipCode.Equals(defaultShipCode, StringComparison.OrdinalIgnoreCase);
    }
    // 这里添加保存数据等后续逻辑
    return Ok();
}

备选方案(直接模型绑定)

如果希望通过模型绑定直接处理,需要保留每个ShipViaDetails实例的字段,配合单选按钮传递选中的ShipCode:

<td>
    <input type="radio"
           name="SelectedDefaultShipCode"
           value="@svias.ShipViaAccesses[i].ShipCode"
           @(svias.ShipViaAccesses[i].IsDefault ? "checked" : "")
           hx-post="@url"
           hx-trigger="change"
           hx-target="this" />
    <!-- 隐藏字段传递实例的其他属性,确保模型绑定能识别集合 -->
    <input type="hidden" name="ShipViaAccesses[@i].ShipCode" value="@svias.ShipViaAccesses[i].ShipCode" />
    <input type="hidden" name="ShipViaAccesses[@i].HasAccess" value="@svias.ShipViaAccesses[i].HasAccess" />
</td>

控制器处理逻辑和推荐方案一致,通过SelectedDefaultShipCode参数遍历集合设置IsDefault。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:04:53