【问题标题】:Insert id into list if checkbox is checked如果选中复选框,则将 id 插入列表
【发布时间】:2014-09-04 07:27:52
【问题描述】:
Net MVC 和我有一张桌子,上面有我想购买的产品。
我想使用复选框来确认购买。
但是如何在 List<int> 中插入 ID?
我有一个类 Approved,其属性为 List<int> approve
我试过了:
@Html.CheckBoxFor(m.approve.Add(id))
@Html.CheckBoxFor(m=>m.approve.Add(id))
@Html.CheckBoxFor(ViewBag.l.approve.Add(id)
如何完成这项任务?
【问题讨论】:
标签:
asp.net
asp.net-mvc
linq
checkbox
【解决方案1】:
您可以轻松地将列表绑定到模型:
因此,您只需要创建一个为此创建的类的列表,其中包括整数 id 和一个用于保存复选框状态的布尔值,如下所示:
public class IdState
{
public int Id {get;set;}
public bool Checked {get;set;}
}
列表必须属于此类,即List<IdState>
关键是使用这样的语法:
Html.CheckBoxFor(m => m[i].Product)
这将产生和输入谁的名字是这样的:
name="[0].Product"
然后,模型绑定器将自动绑定您的列表。当然,您的帖子操作必须收到List<IdState> 才能正常运行。
【解决方案2】:
您可以使用 html 将 id 插入您的复选框
@model yourModel
//for generate checkbox
<input type="checkbox" @(yourmodel ? " checked=checked " : null) name="YourCheckBoxName" value="@model.ID" >
使用 formCollection 从您的视图中获取控制器中的值
【解决方案3】:
我就是这样解决了这个问题:
这个 Javascript 函数遍历所有复选框并将选中一次的 Id 保存到隐藏输入中。
<script>
function submit() {
var x = new Array();
for (i = 0; i < ids.length; i++){
if ($("#" + ids[i].toString() + ".cb").is(':checked')) {
x.push(ids[i]);
}
}
console.log(x.toString());
$("#str").val(x.toString());
}
</script>
切换复选框后,隐藏输入的值被刷新
<script>
$(document).ready(function () {
$("input.cb").change(function () {
submit();
});
});
</script>
在这里,我创建了一个包含所有可能 id 的数组,以提高简单性和性能。
否则我必须遍历所有可能的 id 并检查它们。
<script>ids.push(@id);</script>
这是我的复选框:
<input type="checkbox" value="@id" id="@id" class="cb" />