我有一个由视图模型支持的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源代码,但调试器拒绝为我提供大多数调用的变量值,因此没有多大帮助。
编辑:刚才意识到这里没有实际问题。我的问题:为什么不检查前两个盒子?
答案 0 :(得分:19)
如果@Html.CheckBoxFor(m => m.UseDuo)
呈现未选中的复选框并且您已验证Model.UseDuo = true
,那么唯一可能的原因是模型状态中已存在与您的模型冲突的UseDuo
值。为了确保这一点,请在返回视图之前尝试删除它:
ModelState.Remove("UseDuo");
或完全清除模型状态:
ModelState.Clear();
现在CheckBox帮助器将从模型中选择值。如果选中该复选框,则必须在代码的哪个部分找到UseDuo
值已插入模型状态。