我有一个由我的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))
});
}
答案 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,不是布尔值。