如何提交未选中的复选框

And*_*rus 12 html javascript asp.net-mvc jquery jquery-ui

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

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

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

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

使用jquery,jqueryui,asp.net 2 mvc

Ste*_*gan 10

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

答案是每个复选框都有一个隐藏字段.修改复选框后,使用客户端事件更新隐藏字段.

隐藏字段将始终提交.

但是,由于您使用的是ASP.NET MVC,如果使用HTML.CheckBoxFor帮助程序,它将自动为您处理.


Dia*_*aes 7

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

我不喜欢它.这就是我做的:

HTML中的某个地方:

<input type="checkbox" name="${name}" onclick="true" >
Run Code Online (Sandbox Code Playgroud)

在JQuery中:

第一步是在未选中的所有复选框上设置隐藏值.

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

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

警告:当复选框有共同父项时,你应该检查下一个兄弟的类型是否被隐藏然后删除它!:

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

它适用于我:)