0

这是我的看法:

@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 列表传递给控制器​​逻辑。我假设视图模型可能是解决方案,如下所示:

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

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

4

2 回答 2

2

根据您的评论,您似乎不是在寻找最“正确”的答案,而只是一个快速而肮脏的“我将如何做”的答案。如果您只想传递列表,则可以像这样设置控制器操作:

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

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

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

$("#myLink").click(function()
{
    var url = "site.com/action?";
    var ids = $(".table").find("input:checked");

    ids.each(function()
    {
        url += "id=" + $(this).val() + "&"
    });

    window.location = url;
});

基本上,您想创建一个长查询字符串,其中操作参数的名称一遍又一遍地重复,它标识一个数组。它看起来像这样(id 用于 MyAction 中的 int[] id):

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

然后在构建查询字符串后,将用户重定向到该 url。然后 MVC 应该能够将其绑定到一个数组,并且一切就绪。

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

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

或者,如果数组是对象的属性,它是模型的属性......

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

你只需要玩弄它一些。

于 2012-12-13T23:40:46.400 回答
0

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

于 2012-12-13T22:35:04.443 回答