6

私は2つのモデルを持っています:

class ModelIn{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
}

class ModelOut{
    public ModelOut(){ People = new List<ModelIn>();}
    public List<ModelIn> People { get; private set;}
    public string Country { get; set; }
}

そして、私はコントローラーでModelOutを編集しています。

public ActionResult People()
{
    ...
    return View(SomeModelOutInstanceWith3People);
}
[HttpPost]
public ActionResult(ModelOut items)
{
    ...
}

ビューで私は次のようなsthを持っています:

<% using (Html.BeginForm()) { %>
    <%: Html.EditorFor(m => Model.Country) %>
    <% for(int i = 0; i < Model.People.Count; ++i){ %>
        <%: Html.EditorFor(m => Model.People[i].FirstName) %>
        <%: Html.EditorFor(m => Model.People[i].LastName) %>
        <%: Html.EditorFor(m => Model.People[i].Address) %>
    <% } %>
    <input type="submit" />
<% } %>

すべて問題なく動作しますが、アクション後、ModelOutアイテムが空になります。データが正しく送信されていることがログで確認できます。

私はすべてを試しましたが、何も機能しません。

4

3 に答える 3

1

簡単に試しました<%: Html.EditorFor(m => m.People) %>か?

MVCは、それ自体でリストをループする必要があります。

また、ラムダを指定する方法に注意してください。ラムダは。m => mではなく指定する必要がありますm => Model

PS。私はMVC3を使用しています...

于 2012-09-06T06:22:33.347 に答える
0

問題の理由は、名前の不一致である可能性があります...この名前の不一致のためにデフォルトのモデルバインダーが適切に機能しないことを覚えています...これは、モデルバインダーにさらに情報を指定する必要があることを意味しますその仕事はより良いです...各プロパティに以下のコードを使用するようにビューコードを更新してみてください...

<%= Html.EditorFor(string.Format("People[{0}].FirstName", i), Model.People[i].FirstName) %> 

上記のビューコードは、次のマークアップを生成します

<input id="People_0__FirstName" name="People[0].FirstName" type="text" />

上記の構文上の問題があるかもしれませんが、VisualStudioの助けを借りて正しく解決できると思います

于 2012-09-05T16:10:27.483 に答える
0

@ダイは正しかった。MVCでは、Listのインスタンスの場合、モデルインスタンス名にアイテムを使用できますが、ModelOutには使用できません。

名前を変更itemsした後modelは正常に動作します。

于 2012-09-10T06:55:48.730 に答える