2012-02-21 7 views
0

100以上のフィールドを持つかなり大きなSQLデータベーステーブルにバインドしようとしています。私は基本的なCRUD操作をしています。編集に関しては、ページの長さを管理しやすく使いやすくするために、編集を2つのページ(ビュー)に分割することに決めました。私はEntity FrameworkでMVC 3(C#)を使ってデータベースをマッピングしています。MVC 3モデルが長いテーブルの半分にバインドする

私の質問 - それぞれのActionResultでこのテーブルの「半分」にバインドするにはどうすればよいですか? 2つの問題があります。部分クラスとMetadataType属性を使用して、ほとんどの入力を検証しています。あるページで他のフィールドのフィールドが検証されないように検証を分割するにはどうすればよいですか?次に、テーブルのプロパティの半分だけにバインドする方法は?多くの場合、対応するフォーム入力なしでバインドしようとすると、データベースのエラーがトリガーされます。

私は2つのActionResultsで[Bind(Include = "...")]または[Bind(Exclude = "...")]を使用できますが、それはかなり非論理的で、 includeタグまたはexcludeタグ内の50の個別フィールド。これを行うより良い方法はありますか?

+1

ViewModelクラスを使用して、そのページで編集可能なデータを表すことを検討しましたか? AutoMapperを使用して、エンティティとViewModel間のプロパティマッピングを処理できます。 – epignosisx

+0

このViewModelクラスは明らかに、テーブル全体のEDMクラスから継承できませんでした(または、他の半分のフィールドをバインドしようとしています)...このクラスをテーブルにバインドする方法をどのように知っていますか? – Sylver

+0

エンティティとViewModelは別々のクラスです。 1つは他のものから継承しません。 1つのクラスの各プロパティを他のクラスに手動でマップする必要があります。これは面倒な作業ですが、AutoMapperを使用してマッピングを処理することができます。 – epignosisx

答えて

0

私はこれを誤解しているかもしれないと思います...テスト後、MVCモデルバインディングは結局部分バインディングを可能にします。

1

さて、いくつかのオプションがあります。まず、ビューに固有の専用ビューモデルが必要になります。異なるモデルでこれらのプロパティを複製する必要がある場合、DRYに違反しているように見えるかもしれませんが、現実には、View Models and Data Modelsは2つの目的に役立ち、異なる懸念事項です。あなたはそれらを別々に保つ必要があります。

使用しているプロパティは、各ビューのビューモデルのビューにのみ配置します。

第2に、データモデルが漸進的な更新に適していない場合は、各ビューのデータをどこかに保存して1回の更新ができるようにする必要があります。

一時テーブルに格納することもできますし、データをシリアル化してビューの非表示フィールドに格納することもできます。 MVC Futuresプロジェクトでは、手助けとなる簡単なHTMLヘルパーを提供しています。いずれにしても、部分的な編集ができるように分割する必要があります。

+0

一時テーブルを作成する必要がある場合は、長い「Include」リストまたは「Exclude」リストを作成してActionResult属性として作成することもできます。 – Sylver

+0

@ Silver - ここでもデータモデルとビューモデルは異なる問題です。これを行う正しい方法はビューモデルです。私はそれが多くの仕事のように思えますが、長期的にはより保守的でより堅牢です。 –

関連する問題