如何从foreach中传递多个复选框参数

时间:2019-01-29 14:15:17

标签: c# model-view-controller

我的视图中有一个带有表格的表格,并且在每个单元格上都有一个复选框。我已经为每个复选框使用了单独的ID,但是我不知道如何将它们分别传递给控制器​​操作。我知道如何在“名称”属性上传递单个参数,但是我不确定如何使用这么多不同的复选框来处理它。

查看

@{
     bool IsOwnRegistration = false;
     foreach (var item in Model.Events.Where(i => i.UserId == Model.UserID && Convert.ToDateTime(i.Date) > dateTime))
     {
       if (item.HasCreatedOtherUsers == null)
       {
         IsOwnRegistration = true;
       }
       string Surname = "";
       string Lastname = "";
       <tr>
           @{
             foreach (var Useritem in Model.Users.Where(i => i.UserId == item.HasCreatedOtherUsers))
             {
               Surname = Useritem.Vorname;
               Lastname = Useritem.Nachname;
             }
             if (IsOwnRegistration == true)
             {
               <th style="background-color:grey; width:33%;">
                 Meine Reservation
               </th>
               <th style="width:33%;">@item.Date</th>
               <th style="width:33%;">
                 <div class="custom-control custom-checkbox ">
                   <input type="checkbox" class="custom-control-input" name="@item.EventId" id="@item.Date@item.EventId">
                   <label class="custom-control-label" for="@item.Date@item.EventId"><i style="color:red;" class="fas fa-trash-alt"></i> 
                   </label>
                 </div>
               </th>
             }
             else
             {
               <th style="width:33%;">@Surname @Lastname</th>
               <th style="width:33%;">@item.Date</th>
               <th style="width:33%;">
                 <div class="custom-control custom-checkbox ">
                   <input type="checkbox" class="custom-control-input" name="@item.EventId" id="@item.Date@item.EventId">
                   <label class="custom-control-label" for="@item.Date@item.EventId"><i style="color:red;" class="fas fa-trash-alt"></i> 
                   </label>
                 </div>
               </th>
             }
           }

控制器

public ActionResult DeleteRegistrations(Need to get values of all checkboxes) 
{
  return RedirectToAction("HomePage");
}

1 个答案:

答案 0 :(得分:3)

为了将选定的复选框传输到操作方法,这些复选框应共享一个与操作方法的参数名称匹配的通用名称。以下示例显示了一个Razor视图,该视图列出了表中的一些字符串,并为每个字符串创建了一个复选框:

@model  IEnumerable<string>
@{
    ViewBag.Title = "Home Page";
}

<div class="row">
    <div class="col-md-12">
        @using (Html.BeginForm("Index", "Home", FormMethod.Post))
        {
            <table>
                @foreach (var s in Model)
                {
                    <tr>
                        <td>
                            <input type="checkbox" name="selectedValues" value="@s" id="@s" />
                            <label for="@s">@s</label>
                        </td>
                    </tr>
                }
            </table>
            <input type="submit" />
        }
    </div>
</div>

请注意,复选框的name属性设置为“ selectedValues”,value属性设置为原始字符串(或在更复杂的情况下为ID)。

表单由POST请求提交到以下操作方法:

[HttpPost]
public ActionResult Index(IEnumerable<string> selectedValues)
{
    return View(selectedValues);
}

在POST请求中,所有选中的复选框的所有值都作为键值对以“名称=值”的形式传输。由于所有复选框共享相同的名称,因此ASP.NET MVC可以将其反序列化为IEnumerable<string>