Asp.net mvc 即使模型值为true,也未选中Html.CheckBoxFor
我有一个由viewmodel支持的Razor局部视图,其中包含一个名为Usedou的bool。假设Usedou属性为true,我在Razor中添加了以下代码:Asp.net mvc 即使模型值为true,也未选中Html.CheckBoxFor,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我有一个由viewmodel支持的Razor局部视图,其中包含一个名为Usedou的bool。假设Usedou属性为true,我在Razor中添加了以下代码: @Html.CheckBox("UseDuo", Model.UseDuo) @* Not checked *@ @Html.CheckBoxFor(m => m.UseDuo) @* Not checked *@ @Html.CheckBox("UseDuo2", Model.UseDuo) @* checked *@ @(Mod
@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 *@
前两个复选框未选中,但第三个复选框已选中,最后一行输出为“usedou=true”。有什么好处?根据我对这些Html助手的理解,应该选中所有三个复选框。但是,如果我的复选框的名称与我的模型属性的名称匹配,那么它似乎拒绝被正确地选中
我试图调试到.NETMVC源代码中,但调试器拒绝为涉及的大多数变量提供值,因此没有多大帮助
编辑:刚刚意识到这里没有实际问题。我的问题:为什么前两个框没有选中?如果@Html.CheckBoxFor(m=>m.usedou)
呈现一个未选中的复选框,并且您已经验证了Model.usedou=true
,那么唯一可能的原因是modelstate中已经存在与您的模型冲突的usedou
值。要确保这一点,请在返回视图之前尝试将其删除:
ModelState.Remove("UseDuo");
或清除整个模型状态:
ModelState.Clear();
现在,复选框帮助器将从模型中拾取值。如果选中该复选框,您将必须找到在代码的哪个部分中,
usedou
值已插入modelstate。这是在POST中发生的,还是始终发生的?我不确定是否理解该问题。正在使用GET获取包含此剃须刀的页面。