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

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

Susan Sarandon
リリース: 2025-01-03 09:32:39
オリジナル
739 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート