1

私のシナリオは非常に複雑なので、以下の例で単純化しました。主な問題は、モデルのコレクション プロパティをバインドし、プロパティのパスHtml.TextBox("List[0].Name")Html.TextBoxFor(t => t.List[0].Name). したがって、現在のビューでは、モデルのメタデータの一部しか知らないため、この方法で構築する必要があります。シナリオは次のとおりです。

モデル

public class ModelTest
{
    public int Id {get;set;}
    public List<Foo> Collection {get;set;}
}

public class Foo
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
}

コントローラ

public class TestController: Controller
{
    [HttpGet]
    public ActionResult Test()
    {
        var model = new ModelTest()
        {
            Id = 455,
            Collection = new List<Foo>()
            {
                new Foo(){ Value1 = "sagasga", Value2 = "Beul"},
                new Foo(){ Value1 = "dgdsgds", Value2 = "fhfhd" }
            }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Test( ModelTest model)
    {
        //....
        return View();
    }

意見:

@using (Html.BeginForm())
{
    @Html.TextBox("Id")
    @Html.TextBox("Collection[0].Value1")
    @Html.TextBox("Collection[0].Value2")
    <input type="submit" value="Add" />
}

上記のコードでは、コレクション値の空のテキスト ボックスを取得します。ただし、ページが送信されると、Post メソッドでモデルが正しく構築されます。

どうもありがとう、アレックス

4

1 に答える 1

3

これは、コレクションをコントローラーに投稿するときに、入力フィールドに名前を付ける方法です。ただし、初期値は自分で指定する必要があります。あなたのコードは現在、 name プロパティが に設定されたテキストボックスを作成していCollection[0].Value1ます。この方法で入力を指定する必要がありますが、

@Html.TextBox("Collection[0].Value1", Model.Collection.FirstOrDefault().Value1)
@Html.TextBox("Collection[0].Value2", Model.Collection.FirstOrDefault().Value2)
于 2013-01-15T18:29:19.357 に答える