获取div的复选框id和值列表,并将其传递给控制器

时间:2013-02-06 15:20:07

标签: javascript jquery asp.net-mvc-3 razor

我有一个由我的viewmodel填充的复选框列表。我在checkbox元素中指定了id和value。我需要将这些信息保存在数据库中。目前我有它,我拿了复选框ID和复选框值,把它们放在一个键值对,我打算对我的控制器进行ajax调用。有没有更好的方法来做到这一点(mvc)?你会怎么做? 感谢

我的代码:

查看

   <div class = "divSubject">
     @foreach (var item in Model.dictionarySubject)
            {
     <div>
           @Html.CheckBoxFor(model => item.Value, new { @id = item.Key.subjectID})
           @Html.DisplayFor(model => item.Key.subjectName)
    </div>

            }
   </div>

JQuery的

 $("#btnSave").click(function () {
 var dict = []; // create an empty array
              $('.divSubject input[type=checkbox]').each(function () {
                  var id = $(this).attr('id')
                  dict.push({
                      key: id,
                      value: $(this).attr('checked')
                  });
                  alert(JSON.stringify(dict))
              });
}

2 个答案:

答案 0 :(得分:1)

DOM元素的id有一些限制。例如,它不能以数字开头。我建议您使用HTML5 data- *属性来保存此元数据信息:

@Html.CheckBoxFor(
    model => item.Value, 
    new { data_id = item.Key.subjectID }
)

然后在你的javascript中:

$('.divSubject input[type=checkbox]').each(function () {
    var id = $(this).data('id')
    dict.push({
        key: id,
        value: $(this).attr('checked')
    });
    alert(JSON.stringify(dict))
});

除此之外,您的代码似乎还不错。

答案 1 :(得分:1)

你的代码工作正常,但我相信你想要成对的键值和布尔值。在这种情况下,请考虑以下代码:

dict.push({
     key: id,
     value: !!$(this).attr('checked')
});

$(this).attr(&#39;已检查&#39;)将返回&#34;已检查&#34;或null,不是布尔值。