【问题标题】:Html.CheckBox renders two checkboxesHtml.CheckBox 呈现两个复选框
【发布时间】:2011-07-25 11:01:52
【问题描述】:

当我尝试在 jquery 中序列化 <%: Html.CheckBox("Something", true) %> 时(使用 form.serialize()),我得到两个复选框,一个表示 true,另一个表示 false。我知道 MVC 为 true 的复选框呈现 true,false,所以如果我不是通过 javascript 来的,我只会检查 true 的存在,但是我怎么知道我的复选框在完成表单后是否被选中。序列化?

【问题讨论】:

    标签: c# javascript jquery asp.net asp.net-mvc


    【解决方案1】:

    如果您查看输出 HTML - 您会看到 Html.Checkbox() 实际上在其中呈现了一个具有相同名称的附加隐藏输入。这就是为什么您会看到两个值。我相信 MS 决定这样做是为了发布正确的布尔值(而不是复选框的字符串值 'on')。

    为了解决这个问题,我不再使用 Html.Checkbox() 助手,我总是自己编写完整的 HTML。

    【讨论】:

    • 似乎标准的 html 复选框在选中而不是布尔值时将其设置为“on”。如何在将值“on”发送到我的服务器之前将其转换为 true?
    • 您可以覆盖复选框的值,以便在发布它们时发送您选择的特定值。所以,你可以做的是:。当该复选框被选中时,jQuery 表单序列化将具有 mycheckbox=true。不勾选时,不会序列化任何值。
    • 有趣的是,我在模型中添加了一个与复选框控件的名称相匹配的属性,但模型属性始终为 false,即使序列化字符串的复选框值为 true。我必须在我的操作方法中添加一个额外的参数来收集复选框值。
    • +1 很好地解释了 MS 如何做事以及如何覆盖适用于 jquery 序列化的值。现在对我来说这一切都变得更有意义了。
    【解决方案2】:

    为什么不简单:

    var isChecked = $('#idofyourcheckbox').is(':checked');
    

    form.serialize() 字符串中存储的值而言,它们注定要发送到您可以简单地使用布尔属性的服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 2016-11-22
      • 2010-12-18
      • 2017-10-14
      • 2021-11-09
      相关资源
      最近更新 更多