如何提交未选中的复选框也

如果未选中复选框,则单击表单提交按钮不会提交任何数据。

根据用户选择的表单域,某些复选框可能不在表单中。 因此,提交控制器无法确定未选中的复选框是否存在于表单中。

如果数据库对此列包含true,则此属性不会更新为false。 复选框名称与数据库布尔列名称相同。

如果复选框没有被选中,但是如果复选框不存在于表单中,如何强制表单提交处于未选中状态的复选框或者任何其他想法将数据库中的值设置为false?

jquery,jqueryui,使用asp.net 2 mvc


这是HTML表单中复选框的常见问题,并不是ASP.NET独有的。

答案是每个复选框都有一个隐藏字段。 当复选框被修改时,使用客户端事件来更新隐藏字段。

隐藏字段将始终提交。

但是,由于您使用的是ASP.NET MVC,因此如果您使用HTML.CheckBoxFor帮助器,它将自动为您处理此问题。


这是一个非常普遍的问题 - 当复选框没有被选中时,它不会自动发送到服务器值off / false。 我发现的最常见的答案是添加与复选框同名的隐藏字段,并且value = false。 但是当有人检查它时,它给了我两个值。

我不喜欢它。 这就是我所做的:

HTML中的某处:

<input type="checkbox" name="${name}" onclick="true" >

在JQuery中:

第一步是在未检查的所有复选框上设置隐藏值。

$(document).ready(function () {
        $(".checkbox").each(function () {
                 if ($(this).prop("checked") == undefined) {
                    $(this).after("<input type="hidden" name="" + $(this).attr("name") + "" value="off">")
                 }
              }
        )
     });

其次,我们必须对用户点击复选框做出反应:在选择时删除添加隐藏字段 - 删除DOM中的下一个兄弟节点 - 我们期望隐藏字段在那里。

警告 :当复选框有共同的父母,你应该检查下一个兄弟姐妹的类型是否隐藏,然后将其删除!:

   $(".checkbox").click(function () {
                    if ($(this).prop("checked") == undefined) {
                       $(this).after("<input type="hidden" name="" + $(this).attr("name") + "" value=off>")
                    } else {
                       $(this).next().remove();
                    }
                 }
           );

它适用于我:)


我最短的解决方案:使用复选框的onchange()事件将隐藏的兄弟设置为0或1.如下所示:

var htm = '<input type="checkbox" '+(isMale>0?"checked":"")+' onchange="this.nextSibling.value=this.checked==true?1:0;" /><input type="hidden" name="Gender" value="'+isMale+'" />';

仅提交发送隐藏的兄弟,而不是复选框,因为它没有名称属性。 因此,根据isMale值,上面的序列化为“...&Gender = 1 ...”或“...&Gender = 0 ...”。

链接地址: http://www.djcxy.com/p/71023.html

上一篇: How to submit unchecked checkbox also

下一篇: Jquery check and uncheck checkbox with a link