ホームページ >バックエンド開発 >C++ >ASP.NET MVC 4 でリストを使用したモデル バインディングを効果的に処理するにはどうすればよいですか?

ASP.NET MVC 4 でリストを使用したモデル バインディングを効果的に処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-03 09:32:39729ブラウズ

How to Effectively Handle Model Binding with Lists in ASP.NET MVC 4?

MVC 4 でのリストへのモデルのバインド

項目の IList をビューにバインドしようとすると、HttpPost メソッドで問題が発生する可能性があります。 Phil Haack の記事のような役立つリソースは存在しますが、MVC 4 の潜在的な更新を反映していない可能性があります。これに対処するために、詳細な解決策を検討してみましょう。

ViewModel Configuration

public class MyViewModel
{
   public List<Person> Persons{get;set;}
}

View Implementation

@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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。