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

eli*_*iah 12 asp.net-mvc asp.net-mvc-3

我有一个由视图模型支持的Razor局部视图,其中包含一个名为UseDuo的bool.假设UseDuo属性为true,我将以下代码放入我的Razor中:

@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 *@
Run Code Online (Sandbox Code Playgroud)

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

我尝试调试.Net MVC源代码,但是调试器拒绝给出我调用的大多数变量的值,所以这没什么帮助.

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

Dar*_*rov 20

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

ModelState.Remove("UseDuo");
Run Code Online (Sandbox Code Playgroud)

或者完全清除模型状态:

ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)

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