我在表单上有几个复选框。在需要时只检查其中一个;无论isChecked
参数是以true还是false传递,都会取消选中所有其他参数。
复选框的编码如下:
<%= Html.CheckBox("cbName",Model.checkvalue)%>
<%= Html.CheckBox("cbName1",Model.checkvalue1)%>
我已逐步完成代码,Model.checkValue
和Model.checkValue1
都是正确的,但cbName
未被选中且cbName1
已被选中(事实上,在我的实际应用中) '还有几个CheckBox,没有被检查 - 除了表格中的第二个 - 尽管在我运行的测试中Model
属性都是真的。)
有没有人在&amp;之前遇到这种(错误的)行为你能让我知道我哪里出错吗?我无法在任何地方找到类似的问题,所以我希望我只是做一个简单的错误,可以快速解决...
答案 0 :(得分:1)
如何使用不同的呈现代码的方式(当然您以后可以简化此代码或创建自己的帮助程序):
<%
if(Model.checkvalue1){
%>
<%= Html.CheckBox("name", new {checked =checked }) %>
<%}else{%>
<%= Html.CheckBox("name", null) %>
<%}%>
想法2
确保传入的值是布尔值:因此强制转换为布尔值
<%= Html.CheckBox("cbName1",(bool)Model.checkvalue1)%>
想法3
在使用代码之前
<% bool myTempValue = Model.checkvalue1; %>
<%= Html.CheckBox("cbName1",myTempValue)%>
答案 1 :(得分:0)
这种行为可能有一些原因:
页面的URL中是否有任何名为cbName的查询字符串参数?或者,它是表单的POST请求吗?查询字符串和表单(POST)数据优先于代码中设置的显式值。
您使用的浏览器是什么? FireFox有时会在页面重新加载时保留表单数据。如果选中一个复选框并刷新页面,FireFox会再次检查复选框,即使HTML输入元素中没有“已选中”属性。
答案 2 :(得分:0)
这是因为底层数据使用了可以为空的布尔值。
我将CheckBox
切换为CheckBoxFor
并得到this question中列出的错误,这告诉我问题是基础数据目前使用的是可以为空的布尔值。由于这个数据类型一旦准备就会被切换为非空布尔值,我不需要解决这个问题。
我希望这个答案有助于其他人。
感谢大家的贡献。