Asp.net mvc Asp.net mvc如何将多个复选框值传递给控制器

Asp.net mvc Asp.net mvc如何将多个复选框值传递给控制器,asp.net-mvc,Asp.net Mvc,我正在开发一个可以下载电子邮件的应用程序。在我看来,如果选中复选框,我想向控制器传递一个ID以下载此消息。我将尝试用代码解释: @using (Html.BeginForm("DownloadData", "Messages", FormMethod.Post)) { <table class="table table-bordered table-hover"> @for (int i = 0; i < Model.Co

我正在开发一个可以下载电子邮件的应用程序。在我看来,如果选中复选框,我想向控制器传递一个ID以下载此消息。我将尝试用代码解释:

    @using (Html.BeginForm("DownloadData", "Messages", FormMethod.Post))
    {
        <table class="table table-bordered table-hover">
            @for (int i = 0; i < Model.Count; i++)
            {
            <tr>
                <td><input type="checkbox"       
                 name="selectedIds[@i].messageID"/></td>
                <td>@Model[i].messageFrom</td>
                <td>@Model[i].messageSubject</td>
                <td>@Model[i].messageDate</td>
            </tr>
            }
        </table>
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-default" value="Download" />
        </div>
    }

我认为这不难,但找不到解决办法。谢谢那些能帮忙的人

为了避免仅为此视图更改消息模型(或者如果您无法开始更改),我建议为此视图创建一个新模型,以处理如下选择:

public class MessageSelectionViewModel
{
  public MessagesModels Message { get; set; }
  public bool IsSelected { get; set; }
}
<td>@Html.CheckBoxFor(item => item[i].IsSelected)</td>
<td style="display:none;">@Html.HiddenFor(item => item[i].Message.Id)</td>
<td>@Model[i].Message.messageFrom</td>
<td>@Model[i].Message.messageSubject</td>
<td>@Model[i].Message.messageDate</td>
您的视图现在将是这些新视图对象的列表,因此看起来更像这样:

public class MessageSelectionViewModel
{
  public MessagesModels Message { get; set; }
  public bool IsSelected { get; set; }
}
<td>@Html.CheckBoxFor(item => item[i].IsSelected)</td>
<td style="display:none;">@Html.HiddenFor(item => item[i].Message.Id)</td>
<td>@Model[i].Message.messageFrom</td>
<td>@Model[i].Message.messageSubject</td>
<td>@Model[i].Message.messageDate</td>
@Html.CheckBoxFor(item=>item[i].IsSelected)
@Html.HiddenFor(item=>item[i].Message.Id)
@模型[i]。Message.messageFrom
@模型[i]。Message.messageSubject
@模型[i]。Message.messageDate
您的post方法将变成:

[HttpPost]
public ActionResult DownloadData(IEnumerable<MessageSelectionViewModel> selectedMessages)
{
  foreach (int messageId in selectedMessages.Where(m => m.IsSelected == true).Select(m => m.Message.Id))
  {
  }
  return View(...);
}
[HttpPost]
公共操作结果下载数据(IEnumerable selectedMessages)
{
foreach(selectedMessages.Where中的int messageId(m=>m.IsSelected==true)。Select(m=>m.Message.Id))
{
}
返回视图(…);
}

当然,如果这不是什么大问题,你可以节省一些时间和精力,只需像Stephen建议的那样将
IsSelected
添加到你的模型中。

复选框的意义是什么?它不绑定到模型中的任何内容,甚至没有
属性。如果要指示选择了哪些对象,请将
bool IsSelected
属性添加到模型中,并使用
@Html.CheckBoxFor(m=