【问题标题】:Html.CheckBoxFor not checked even though the model value is true即使模型值为真,也未检查 Html.CheckBoxFor
【发布时间】:2012-02-05 05:17:20
【问题描述】:

我有一个由视图模型支持的 Razor 局部视图,其中包含一个名为 UseDuo 的布尔值。假设 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 *@

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

我尝试对 .Net MVC 源进行调试,但调试器拒绝为我提供涉及的大多数变量的值,因此没有太大帮助。

编辑:刚刚意识到这里没有实际问题。我的问题:为什么不选中前两个框?

【问题讨论】:

  • 这发生在 POST 中,还是总是发生?
  • 不确定我是否理解这个问题。正在使用 GET 获取包含此 Razor 的页面。

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


【解决方案1】:

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

ModelState.Remove("UseDuo");

或者完全清除模型状态:

ModelState.Clear();

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

【讨论】:

    猜你喜欢
    • 2019-08-29
    • 2019-10-12
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多