以下是我的观点:
@model Affiliate
<div class="box paint color_16">
<div class="title">
<h4><i class="icon-tasks"></i><span>@Model.CompanyName's Commissions</span> </h4>
</div>
<div class="content top ">
<div class="subtitle">
@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" })
</div>
<table class="table table-striped table-hover">
<tr>
<h3>Commissions</h3>
</tr>
<tr>
<td></td>
<td>Amount</td>
<td>Status</td>
<td>Action</td>
</tr>
@foreach (var item in Model.Commissions)
{
<tr>
@if (item.Status == ViewBag.PaymentStatus || ViewBag.PaymentStatus == "All")
{
<td>@Html.CheckBox("commId", new { value = item.Id })</td>
<td>@Html.DisplayFor(x => item.PayoutAmount)</td>
<td>@Html.DisplayFor(x => item.Status)</td>
}
</tr>
}
</table>
</div>
我想要做的是当我点击顶部的动作链接时,从表格中获取所有已检查的项目,并将该ID列表传递给控制器逻辑。我假设一个viewmodel可能是解决方案,如下所示:
public Affiliate affilite { get; set; }
public List<int> selectedItems { get; set; }
etc.
但是如何将所选项目放入VM selectedItems容器?
答案 0 :(得分:2)
根据你的评论,你似乎没有找到最“正确”的答案,而只是一个快速而肮脏的“我将如何做到这一点”的答案。如果您只想传递列表,可以像下面这样设置控制器操作:
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...
你只需要玩一些。
答案 1 :(得分:0)
在表单标记内使用html检查(您也可以使用帮助程序)并将模型发布到后期操作。 MVC将自动序列化模型