循环访问表,查找选中的复选框,添加到数据库?

时间:2016-03-01 22:01:47

标签: c# asp.net-mvc

我一直在寻找一篇文章或例子,但似乎无法找到我正在寻找的东西。如果我在一个视图中写出一个表,其中一个列中有一个复选框,我将如何循环遍历该行,看看是否选中了复选框,然后是否将该记录添加到数据库中?

我还在学习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>

1 个答案:

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