ASP.NET MVC2 Html.Checkbox不检查isChecked = true

时间:2011-09-01 11:20:11

标签: asp.net-mvc asp.net-mvc-2

我在表单上有几个复选框。在需要时只检查其中一个;无论isChecked参数是以true还是false传递,都会取消选中所有其他参数。

复选框的编码如下:

    <%= Html.CheckBox("cbName",Model.checkvalue)%>
    <%= Html.CheckBox("cbName1",Model.checkvalue1)%>

我已逐步完成代码,Model.checkValueModel.checkValue1都是正确的,但cbName未被选中且cbName1已被选中(事实上,在我的实际应用中) '还有几个CheckBox,没有被检查 - 除了表格中的第二个 - 尽管在我运行的测试中Model属性都是真的。)

有没有人在&amp;之前遇到这种(错误的)行为你能让我知道我哪里出错吗?我无法在任何地方找到类似的问题,所以我希望我只是做一个简单的错误,可以快速解决...

3 个答案:

答案 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中列出的错误,这告诉我问题是基础数据目前使用的是可以为空的布尔值。由于这个数据类型一旦准备就会被切换为非空布尔值,我不需要解决这个问题。

我希望这个答案有助于其他人。

感谢大家的贡献。