0

我的视图模型填充了一个复选框列表。我在复选框元素中指定 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))
              });
}
4

2 回答 2

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))
});

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

于 2013-02-06T15:59:52.440 回答
1

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

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

$(this).attr('checked') 将返回“checked”或 null,而不是布尔值。

于 2013-02-06T16:05:45.610 回答