Html.CheckBox即使模型值为true也未检查

时间:2012-02-04 16:27:01

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

我有一个由视图模型支持的Razor局部视图,其中包含一个名为UseDuo的bool。让我们说UseDuo属性为true,我将以下代码放入剃刀:

@Html.CheckBox("UseDuo", Model.UseDuo) @* Not checked *@
@Html.CheckBoxFor(m => m.UseDuo) @* Not checked *@
@Html.CheckBox("UseDuo2", Model.UseDuo) @* checked *@
@(Model.UseDuo ? "UseDuo=true" : "UseDuo=false") @* outputs UseDuo=true *@

未检查前两个复选框,但检查第三个复选框,最后一行输出为" UseDuo = true"。是什么赋予了?根据我对这些Html助手的理解,应该检查所有三个复选框。但似乎如果我的复选框的名称与我的模型属性的名称匹配,则拒绝正确检查。

我尝试调试.Net MVC源代码,但调试器拒绝为我提供大多数调用的变量值,因此没有多大帮助。

编辑:刚才意识到这里没有实际问题。我的问题:为什么不检查前两个盒子?

1 个答案:

答案 0 :(得分:19)

如果@Html.CheckBoxFor(m => m.UseDuo)呈现未选中的复选框并且您已验证Model.UseDuo = true,那么唯一可能的原因是模型状态中已存在与您的模型冲突的UseDuo值。为了确保这一点,请在返回视图之前尝试删除它:

ModelState.Remove("UseDuo");

或完全清除模型状态:

ModelState.Clear();

现在CheckBox帮助器将从模型中选择值。如果选中该复选框,则必须在代码的哪个部分找到UseDuo值已插入模型状态。