如何在ASP.NET MVC4表中执行简单的多选

这是我的观点:

@model Affiliate 

@Model.CompanyName's Commissions

@Html.ActionLink("Void", "DeleteInvoice", new { commList = "??", affId = Model.Id }, new { @class = "btn" }) @Html.ActionLink("Create Invoice", "CreateInvoice", new { commList = "??", affId = Model.Id }, new { @class = "btn" }) @Html.ActionLink("Pay", "PayInvoice", new { commList = "??", affId = Model.Id }, new { @class = "btn" })

Commissions

@foreach (var item in Model.Commissions) { @if (item.Status == ViewBag.PaymentStatus || ViewBag.PaymentStatus == "All") { } }
Amount Status Action
@Html.CheckBox("commId", new { value = item.Id }) @Html.DisplayFor(x => item.PayoutAmount) @Html.DisplayFor(x => item.Status)

我想要做的是当我点击顶部的actionlink,从表中获取所有检查的项目,并将id列表传递给控制器​​逻辑。 我假设一个viewmodel可能是解决方案,如下所示:

  public Affiliate affilite { get; set; } public List selectedItems { get; set; } etc. 

但是如何将选定的项目放入VM selectedItems容器中?

基于你的评论,你似乎没有找到最“正确”的答案,而只是一个快速而肮脏的“我将如何做到这一点”的答案。 如果您只想传递列表,可以像下面这样设置控制器操作:

 public ActionResult MyAction(int[] id) { ... } 

或者,您似乎表明它是一个强类型的视图模型,其属性包含一个List(我会缩短属性的名称,你会在一秒钟内看到原因)。

在javascript中,最简单的方法是使用jQuery绑定超链接上的click事件,该事件获取已检查的项目列表并将其附加到查询字符串。

 $("#myLink").click(function() { var url = "site.com/action?"; var ids = $(".table").find("input:checked"); ids.each(function() { url += "id=" + $(this).val() + "&" }); window.location = url; }); 

基本上,您希望创建一个长查询字符串,其中action参数的名称反复重复,这标识了一个数组。 它看起来像这样(id是MyAction中的int [] id):

 id=15&id=20&id=25&id=30&.... 

然后,一旦构建了查询字符串,就将用户重定向到该URL。 然后MVC应该能够将它绑定到一个数组,并且你已经完成了设置。

无论如何,这基本上就是这个想法; 我写的语法和javascript可能是关闭所以不要复制我的代码并期望它按原样工作 – 我写的是我的头脑。 如果您的操作绑定到viewmodel,则需要将查询字符串中的参数设置为模型属性的名称:

 selectedids=1&selectedids=2&selectedids=3... 

或者,如果数组是对象的属性,则该属性是模型的属性…

 model.selectedids=1&model.selectedids=2&model.selectedids=3... 

你只需要玩一些它。

在表单标记内使用html检查(您也可以使用帮助程序)并将模型发布到后期操作。 MVC将自动序列化模型