MVC 3复选框始终返回true,即使未选中也是如此

时间:2011-10-06 12:12:22

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

我有以下代码

@foreach (var item in Model.Defaults)
    {
        <tr class="CertainCategory">
            <td>
                @item.Item1
            </td>
            <td>
                @Html.CheckBoxFor(c => c.Use)
                @Html.Hidden("guid", guid.guid.ToString())
            </td>
        </tr>
    }

我正在尝试使用AJAX向控制器方法提交表单值。我的问题是,复选框的值始终以true发送。

$('.CropUsageItem').each(function () {

            var guid = $(this).find("#guid").val();
            var chk = $(this).find("#use").val();
            var data = {
                guid: guid,
                chk: chk
            };

            $.ajax({
                async: false,
                type: "POST",
                url: "DefaultValues/SaveDefault",
                data: data
            });
        });

我在StackOverflow中搜索了类似的结果,但没有一个完全适用于我的场景。如何发送正确的值?

3 个答案:

答案 0 :(得分:42)

如果选中了复选框,则可以使用以下验证。

var chk = $('#use').attr('checked');

var chk = $('#use').is(':checked'); 

答案 1 :(得分:6)

.val()返回value属性的内容。因为它可能是非null,等于true。

同时检查外壳。 JavaScript,css&amp;因此jQuery也区分大小写。

答案 2 :(得分:1)

与Simon说的一样,.val()返回复选框的value属性,该属性可以是您想要的任何值。但更具体地说,它返回DOM对象的值 property ,它由属性初始化。 MVC似乎将值设置为&#34; true&#34;默认情况下,这对我来说似乎毫无意义。但在某些情况下,您可能希望将this thread指出,将其设置为已检查选项的ID或其他有意义的值。

尼古拉斯提供了一个很好的方法来确定上面是否选中了复选框。选中并取消选中此jsfiddle上的复选框,以获取各种方法及其结果的示例:

<强> JQuery Checkbox Checked

小提琴摘要:

$("#use").val();  //Returns the value. Not related to checked state.
$("#use").attr("checked")  //Returns the checked attribute value. Does not change with checked state.
$("#use").prop("checked")  //Returns boolean checked state.
$("#use")[0].checked)  //Returns boolean checked state.
$("#use").is(":checked")  //Returns boolean checked state.

请注意.val和.attr的结果不会更改。这是因为val属性不依赖于checked状态,并且当复选框更改时,标记中的实际checked属性不会更新。只有幕后DOM对象的属性,这是后三种方法访问的内容。

有关详细信息,请参阅jQuery的API documentation on .prop