項目の IList をビューにバインドしようとすると、HttpPost メソッドで問題が発生する可能性があります。 Phil Haack の記事のような役立つリソースは存在しますが、MVC 4 の潜在的な更新を反映していない可能性があります。これに対処するために、詳細な解決策を検討してみましょう。
public class MyViewModel { public List<Person> Persons{get;set;} }
@model MyViewModel @for( int i = 0; i < Model.Persons.Count(); ++i) { @Html.HiddenFor(m => m.Persons[i].PersonId) @Html.EditorFor(m => m.Persons[i].FirstName) @Html.EditorFor(m => m.Persons[i].LastName) }
[HttpPost]public ViewResult(MyViewModel vm) { ... }
ポストバック後には、入力フィールドを持つプロパティのみが値を持つことに注意してください。さらに、MVC のモデル バインディング機構は連続した ID のみを認識します。項目が条件付きで非表示になる次の例を考えてみましょう:
@for( int i = 0; i < Model.Persons.Count(); ++i) { if(i != 4)//conditionally hide 5th item, { //but BUG occurs on postback, all items after 5th will not be bound to the the list @Html.HiddenFor(m => m.Persons[i].PersonId) @Html.EditorFor(m => m.Persons[i].FirstName) @Html.EditorFor(m => m.Persons[i].LastName) } }
この場合、最初の 4 つの項目のみがポストバックにバインドされます。これを回避するには、IList 内のすべての項目の ID が連続していることを確認してください。
以上がASP.NET MVC 4 でリストを使用したモデル バインディングを効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。