2011-01-26 17 views
1

旅行会社の「検索」フォームを作成する必要があります。マルチビュー検索フォーム(ASP.NET MVC 2)

フォーム内のほとんどのフィールドは、すべてのコンポーネントの共通(旅行日、出発地、目的地の都市など)ですが、 (ビジネス/ファースト/エコノミークラス&飛行検索のノンストップフライトインジケータなど)も含まれています。

ほとんどのフィールドは共通ですが、コンポーネント固有のラベルで表示する必要があります。たとえば、「travel dates」はホテル検索フォームの「&チェックイン日」となります。フライト検索フォームに「departure &帰国日」と表示されます。

コンポーネント固有のラベルを持つフィールドを表示する検索フォームを設計する最良の方法は何ですか?また、フィールドをコンポーネントにマップ/関連付ける方法を提供します(共通のフィールドからすべてのコンポーネントタイプへ、コンポーネント固有のフィールドから対応するコンポーネント)?この動作を達成するためのData Annotationsに類似したものはありますか?

答えて

0

したがって、 "フォームA"内のフィールド1には特定の表示ラベルが付きます "フォーム"には多くのフィールドがあり、各フィールドにはフォームごとに変更される表示ラベルがあります。 フォームには1つ以上のフィールドがあります すべてのフィールドがすべてのフィールドを持つ必要はありません(一部のフォームでは、すべてのフィールドのセットよりもフィールドが少ない場合があります)。

したがって、このデータを表すデータベースのテーブル(必要に応じてこれらのテーブルのデータをメモリにキャッシュすることができます)を想像できれば、特定のフォームのレンダリング時に、フィールドとその表示ラベルのセット。表示ラベルを適切なコンポーネントにバインドするのは簡単です。

これは反射に頼るのではなく、これを行う最善の方法です。

基本的なデータ構造は、フォームの名前(または他の識別子)をキーとして使用する辞書になります。 Discontaryの「値」部分は、コントロールID /名前をキーとして使用する別の辞書になり、値は表示ラベルになります。

そうのようなもの:

Dictionary<string, Dictionary<string, string>> 

それとも、そう

パブリッククラス ControlDisplayLabelDictionaryのように、後者は、 "カスタム" の辞書を持つことができます: 辞書{ }

そして、そういう形で全体の構造を作ることができます:

var formControlLabels = new Dictionary<string, 

ControlDisplayLabelDictionary>();もちろん

var cdForFormA = new ControlDisplayLabelDictionary(); 

    cdForFormA.Add("Control1", "Travel Dates"); 
    cdForFormA.Add("Control2", "Some Label control2 on FormA"); 
    cdForFormA.Add("Control3", "Some Label control3 on FormA"); 

    formControlLabels.Add("Form A", cdForFormA); 

    var cdForFormB = new ControlDisplayLabelDictionary(); 
    cdForFormA.Add("Control1", "Booking Dates"); 
    cdForFormA.Add("Control2", "Some Label control2 on FormB"); 
    cdForFormA.Add("Control3", "Some Label control3 on FormB"); 

    formControlLabels.Add("Form B", cdForFormA); 

、データは実際の人口コードが異なりますデータベースから来ているが、考え方は同じまま。今、あなたはキャッシュ内のこの構造をメモリ上で選ぶことができましたが、パフォーマンス上の問題がなければ、それはしません。なぜなら、データベースは実際にこの「データ」をメモリにキャッシュしていて、データベースエンジンがハードディスクにヒットすることはほとんどありません初めての後に。もちろん、データベースサーバーボックスに十分なメモリがあります。

+0

ありがとうShiv Kumar。その場合、私のフォームに強く入力するのですか?私のView Modelはどのように見えますか(DBからフィールドとラベルをレンダリングする場合)? – Alex

+0

厳密に型指定されたビューは、コード補完などを得るための単なる「砂糖」に過ぎません。私は答えを編集して構造の質問に答えます –