1

次のような Razor ビューがあります。

@model Namespace.Namespace.SupplierInvoiceMatchingVm

@using(Html.BeginForm("MatchLines", "PaymentTransaction"))
{
    <table class="dataTable" style="width: 95%; margin: 0px auto;">
    <tr>
        <th></th>
        <th>PO Line</th> 
        <th>Description</th> 
    </tr>
    @for (var i = 0; i < Model.Lines.Count; i++)
    {
        <tr>
            <td>@Html.CheckBoxFor(x => x.Lines[i].Selected)</td>
            <td>@Html.DisplayFor(x =>x.Lines[i].LineRef) @Html.HiddenFor(x => x.Lines[i].LineRef)</td>
            <td>@Html.DisplayFor(x =>x.Lines[i].Description) @Html.HiddenFor(x => x.Lines[i].Description)</td>
        </tr>
    }

    </table>
    <input type="submit" value="Submit"/>
}

オブジェクトLinesのリストはどこにあり、メソッドのシグネチャは次のようになりますSupplierInvoiceMatchingDtoMatchLines

public ActionResult MatchLines(IEnumerable<SupplierInvoiceMatchingDto> list)

このビューで送信ボタンを押すと、リストがコントローラーに渡されnullます。

ただし、 を に変更し、代わりにすべてのテーブル行をに変更するModelと、すべての情報が正常に投稿されます。List<SupplierInvoiceMatchingDto>x => x[i].Whatever

私の質問は次のとおりです。このビューでモデルから他のものが必要なため、モデルを維持しながら、リストをコントローラーに投稿するにはどうすればよいですSupplierInvoiceMatchingVmか (簡潔にするために取り出しました)。

注: 私が取り出したいくつかのユーザー入力フィールドがあります。それは、与えられたのと同じデータを投稿するだけではありません。

4

2 に答える 2

1

Postアクションがモデルを正しく取り込んでいませんか (ViewModel である必要があります)? そうではありませんか:

[HttpPost]
public ActionResult MatchLines(SupplierInvoiceMatchingVm viewModel)
{
    var list = viewModel.Lines;
    // ...
}
于 2013-05-29T14:22:27.567 に答える