选择表的所有tr并使用复选框将其发送到控制器,在MVC 4中

use*_*576 3 c# asp.net asp.net-mvc razor asp.net-mvc-4

我想使用复选框选择多个用户并将结果发送到我的控制器.

起初我只是将移动用户的数量发送到控制器,但是发送的数量超过了数量,我需要号码和名称用户,我的控制器和我的视图如下:

会不会以某种方式发送号码和名称?

@using (Html.BeginForm("Enviar", "Home")) {
  <table id="myTable">
    <thead>
      <tr>
        <th>
          <input type="checkbox" />
        </th>
        <th>@Html.DisplayName("Nome")</th>
        <th>@Html.DisplayName("CANCELADO")</th>
        <th>@Html.DisplayName("Numero")</th>
      </tr>
    </thead>
    <tbody>
      @foreach (var item in Model) {
        <tr>
          <td>
            <input type="checkbox" name="CELULAR" value="@item.CELULAR" />
          </td>
          <td name="Nome">@Html.DisplayFor(modelItem => item.NOME)</td>
          <td name="Email">@Html.DisplayFor(modelItem => item.CANCELADO)</td>
          <td name="Celular" value="@item.CELULAR">@Html.DisplayFor(modelItem => item.CELULAR)</td>
        </tr>
      }
    </tbody>   
  </table>
  <input type="submit" value="Selecionar"/> 
}
Run Code Online (Sandbox Code Playgroud)

接收的控制器:

[HttpPost]
public ActionResult Enviar(String[] celular) {
   .....
   return View();
}
Run Code Online (Sandbox Code Playgroud)

mat*_*mmo 6

发布集合时,必须正确编制索引.因此,你必须使用for循环而不是a foreach.

另外,为什么你HttpPost拿一个String[]而不是你的模特?首先将其更改为您的模型类型.

假设你的模型是: @model List<YourType>

改变你HttpPost的想法:

[HttpPost]
public ActionResult Enviar(List<YourType> model) {
   .....
   return View();
}
Run Code Online (Sandbox Code Playgroud)

现在我们将把你的内容重foreach写成一个for并使用CheckBoxFor帮助器.此外,HiddenFor为要在帖子上看到的任何属性添加字段:

@for (int i = 0; i < Model.Count; i++)
{
    <tr>
      <td>
        @Html.CheckBoxFor(m => m[i].CELULAR)
      </td>
      <td name="Nome">
          @Html.HiddenFor(m => m[i].NOME)
          @Html.DisplayFor(m => m[i].NOME)
      </td>
      <td name="Email">
          @Html.HiddenFor(m => m[i].CANCELADO)
          @Html.DisplayFor(m => m[i].CANCELADO)
      </td>
      <td name="Celular" value="@m[i].CELULAR">
          @Html.DisplayFor(m => m[i].CELULAR)
      </td>
    </tr>
}
Run Code Online (Sandbox Code Playgroud)