我一直在寻找一篇文章或例子,但似乎无法找到我正在寻找的东西。如果我在一个视图中写出一个表,其中一个列中有一个复选框,我将如何循环遍历该行,看看是否选中了复选框,然后是否将该记录添加到数据库中?
我还在学习MVC中的复选框和下拉列表,所以我最终必须弄清楚如何将UserID分配给行或复选框,然后我会查看GroupId的下拉列表将它们分配给。
基本方案是拥有一个未分配用户列表,其中包含表格上方的组下拉列表。然后,管理员将从DDL中选择哪个组,然后检查他想要分配给它的用户。然后我需要循环获取已检查记录的UserId,并将它们添加到具有EntityFramework的数据库中。
任何人都知道任何类似的例子或文章吗?
<table class="table table-bordered table-striped table-hover table-condensed tbackground">
<tr>
<th class="text-center">
</th>
<th class="text-center">
First Name
</th>
<th class="text-center">
Last Name
</th>
<th class="text-center">
Email
</th>
<th class="text-center">
Phone
</th>
</tr>
@foreach (var item in Model)
{
if (item.GroupId == 0)
{
<tr>
<td>
@Html.CheckBox("isSelected")
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
<a href="mailto:@item.EmailPrimary">@item.EmailPrimary</a>
</td>
<td class="text-center">
@Html.DisplayFor(modelItem => item.PhonePrimary)
</td>
</tr>
}
}
</table>
答案 0 :(得分:1)
您可以通过以下几种方式实现:
将IsSelected
属性添加到您的模型,并将foreach
更改为for
循环。这样您的表格for
将如下所示:
@for (var i = 0; i < Model.Count(); i++)
{
if (item.GroupId == 0)
{
<tr>
<td>
@Html.CheckBoxFor(x => x[i].IsSelected)
</td>
<td>
@Html.DisplayFor(x => x[i].FirstName)
</td>
<td>
@Html.DisplayFor(x => x[i].LastName)
</td>
<td>
<a href="mailto:@Model[i].EmailPrimary">@Model[i].EmailPrimary</a>
</td>
<td class="text-center">
@Html.DisplayFor(x => x[i].PhonePrimary)
</td>
</tr>
}
}
使用索引可让您的ModelBinder
知道您正在发布列表并将绑定此列表的属性。也就是说,如果选中了复选框,则true
中的IsSelected
属性将获得Controller
值。
然后,您可以在Controller
中执行此操作以获取所选记录:
var selecteds = MyPostedModel.Where(x => x.IsSelected);
...或
首先在复选框中添加data-*
属性,该复选框将保存您的ID:
@Html.CheckBox("isSelected", false, new { data_group_id = item.GroupId})
然后在复选框中添加一个事件列表器,单击jquery:
$("input[name='isSelected']").on('click', function() {
var groupId = $(this).data("group-id");
var isChecked = $(this).is(":checked");
$ajax.... //Use an ajax call and pass the values to your action
});