2

ここで説明されているように、ビューをオブジェクトのリストにバインドしようとしています リストへのモデルのバインド

私の問題は、リストが POST を介して返されたときです。リストには最初に送信した正しい数の要素が含まれていますが、オブジェクト内の値は設定されていないかのように返されます。モデルバインダーを正しく解析するために何を見逃したのかわかりません。

ここに私のテストコードがあります:

私のモデルは次のとおりです。

IList<Test>

ここで、Test は次のように定義されます。

public class Test
{
    public int x;
}

私の TestController では、ポストバックを持つメソッド「Create」を使用しています。

public ActionResult Create()
    {

        List<Models.Test> testList = new List<Models.Test>() {
            new Models.Test() { x = 5 }
        };

        return View(testList);
    }

    //
    // POST: /Test/Create

    [HttpPost]
    public ActionResult Create(IList<Models.Test> tests)//Models.TestContainer tc)
    {
        return View(tests);
    }

および「作成」ビューのコード:

@model IList<ksg.Models.Test>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>TestContainer</legend>
       @Html.EditorFor(x => x[0])
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

そして最後に、Test クラスのエディター テンプレート:

@model ksg.Models.Test
@using ksg.Helpers
<div>
@Html.TextBoxFor(x => x.x)
</div>

上記のように、 で 1 アイテムのリストを送信しますTest.x = 5が、 でブレークポイントを設定すると Create(IList<Models.Test> tests)、 tests には で 1 つのオブジェクトが含まれますx = 0

私が見逃したアイデアはありますか?

4

2 に答える 2

5

この2つの変更を試してください:

テストクラス:

      public class Test
      {
         public int x { get; set; }
      }

作成.cshtml

    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>TestContainer</legend>
               @Html.EditorFor(x => x[0].x)   @*<--*@
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
于 2013-01-04T04:31:16.283 に答える