2016-12-20 2 views
0

コントローラにチェックインしたモデルのリストを取得します。チェックされた行にはtrueとfalseの値が返されます。私はそれがFormCollectionのためだと読んだ。 質問:代わりにをGetCheckedにすることができますか?私はそれを試してみると、それはヌル値になりました。コントローラ

+0

あなたの@modelステートメントの後の[]はそこにありますか?それ以前にそこに使われているのを見たことはありません。 – VisualBean

答えて

0

もこのリンクで見てみましょう:

  • あなたなどCheckBoxFor、EditorForを使用して、リストや配列からコントロールをレンダリングする場合は絶対に使用しないでくださいforeach - 代わりに、for -loopを常に使用し、コレクションにインデックスを適用してください。その理由は、インデックス作成では<form>の番号付きアイテムが個作成され、それ以降は互いに競合しなくなり、番号付きアイテムは送信された値のリストを正常に処理するために必要なアイテムになります。簡単な例については、この回答を参照してください。FormCollectionを使用しないでください。代わりにViewModelクラスを使用してください。https://stackoverflow.com/a/15375949/1220550

  • FormCollectionを使用することで、Databinding/ModelState/ValidationSummaryをまとめ、ASP.NET MVCの優れた機能となります。ここで説明するのはあまりにも多いですが、正確にはgreat linkです。

  • データバインディング(前を参照)だけでなく、一貫性と使いやすさのために、完全に定義されたViewModelクラスを使用することをお勧めします。 の配列IEnumerable<X>の場合は、@modelが混乱し、最悪の場合はエラーの原因になります。突然あなたもintを渡したい場合はどうなりますか?不可能なのはIEnumerable<X>[]ですが、ViewModel付きのケーキです。クラスに追加するだけです。

+0

私は今それをすべて行い、それはうまくいきます、ありがとうございます=)。 – mdc

0

IEnumerableインターフェイスをモデルバインダでバインドする必要があるため、結果はnullです。プロバイダはプロパティのタイプを見てから、そのプロパティのためだけにカスタムモデルのバインダを作成できるので、モデルバインディングプロバイダを作成しようとしていると思います。

あなたは変更する必要があります物事のカップルがありますhttp://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx