8

これが私のモデルです:

public class Items
    {
        public string Foo { get; set; }
        public string Bar { get; set; }
    }

コントローラ:

public ActionResult Index()
    {
        var model = new List<Items>
                        {
                            new Items
                                {
                                    Foo = "foo",
                                    Bar = "bar"
                                },
                            new Items
                                {
                                    Foo = "ai",
                                    Bar = "ia"
                                },
                            new Items
                                {
                                    Foo = "one",
                                    Bar = "two"
                                }
                        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(List<Items> model)
    {
        return View(model);
    }

ビュー(インデックス):

@using (Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        <div onclick="$(this).remove();">
            @Html.TextBoxFor(model => model[i].Foo) <br/>
            @Html.TextBoxFor(model => model[i].Bar)
        </div>
    }
    <div>
        <input type="submit"/>
    </div>
}

2番目のペアを削除します:

    <div onclick="$(this).remove();">
        <input name="[0].Foo" type="text" value="foo"> <br>
        <input name="[0].Bar" type="text" value="bar">
    </div>

    <div onclick="$(this).remove();">
        <input name="[2].Foo" type="text" value="one"> <br>
        <input name="[2].Bar" type="text" value="two">
    </div>

投稿すると、最初のペア("foo"と"bar")のみが表示されます。これは、3番目のペアのインデックスが「2」であるためです。両方のペアを取得したい(FormCollectionを使用しない。自動的にバインドしたい)。実際には、フォームには他にも多くの入力があるので、各入力にインデックスをリロードして再アタッチしたくありません。手伝って頂けますか?

4

2 に答える 2

4

これはあなたに役立つかもしれません...

各アイテムに非表示フィールドを配置する必要があります。

MVC3非シーケンシャルインデックスとDefaultModelBinder

于 2012-09-06T12:49:39.267 に答える
3

Amit Prajapatiのおかげで、解決策が見つかりました。

@using (Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        var identifier = Guid.NewGuid();
        <div onclick="$(this).remove();">
            @Html.Hidden("Index", identifier)
            @Html.TextBox("[" + identifier + "].Foo")
            <br/>
            @Html.TextBox("[" + identifier + "].Bar")
        </div>
    }
    <div>
        <input type="submit" />
    </div>
}
于 2012-09-06T13:13:08.683 に答える