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)
{
    ...
}

または、リストを含むプロパティを持つビューモデルに強く型付けされていることを示しているようです(プロパティの名前を短くします。理由はすぐにわかります)。

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;
});

基本的に、アクション パラメーターの名前が何度も​​繰り返される 1 つの長いクエリ文字列を作成して、配列を識別します。次のようになります (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 に答える