.NET MVC模态框切换下拉框时,如何取消模型绑定复选框选中状态?
问题分析与解决方案
核心问题是你用$("#Aid")选中的不是实际的复选框元素。
@Html.EditorFor针对布尔类型的默认模板,会生成一个包含<label>和<input type="checkbox">的外层容器(比如<div>),你传递的@id="Aid"会被应用到这个容器上,而非真正的复选框<input>。因此你修改的是容器的属性,而非复选框本身,自然看不到视觉上的变化。
解决方案
1. 改用Html.CheckBoxFor直接生成复选框
把EditorFor替换成CheckBoxFor,这样能直接生成独立的复选框元素,确保ID正确绑定到<input>上:
<div class="form-group"> @Html.LabelFor(model => model.FirstAider, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.CheckBoxFor(model => model.FirstAider, new { @class = "form-control", @id = "Aid" }) </div> </div>
2. 简化jQuery代码
不需要同时使用prop和removeAttr,对于复选框的状态控制,只用prop("checked", false)就足够(prop负责控制当前DOM状态,attr仅对应初始HTML属性):
$('#BookList').change(function () { $("#Aid").prop("checked", false); });
备选方案(若必须使用EditorFor)
如果坚持使用EditorFor,需要通过容器找到内部的复选框。默认模板下,容器内的复选框name属性是FirstAider,可以用如下选择器:
$('#BookList').change(function () { $("#Aid input[name='FirstAider']").prop("checked", false); });
这样就能准确选中实际的复选框元素,修改状态后视觉会同步更新。
内容的提问来源于stack exchange,提问作者themightyshrub
相关产品推荐
相关产品推荐

