私のシナリオは非常に複雑なので、以下の例で単純化しました。主な問題は、モデルのコレクション プロパティをバインドし、プロパティのパス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 メソッドでモデルが正しく構築されます。
どうもありがとう、アレックス