したがって、 "フォーム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);
、データは実際の人口コードが異なりますデータベースから来ているが、考え方は同じまま。今、あなたはキャッシュ内のこの構造をメモリ上で選ぶことができましたが、パフォーマンス上の問題がなければ、それはしません。なぜなら、データベースは実際にこの「データ」をメモリにキャッシュしていて、データベースエンジンがハードディスクにヒットすることはほとんどありません初めての後に。もちろん、データベースサーバーボックスに十分なメモリがあります。
ありがとうShiv Kumar。その場合、私のフォームに強く入力するのですか?私のView Modelはどのように見えますか(DBからフィールドとラベルをレンダリングする場合)? – Alex
厳密に型指定されたビューは、コード補完などを得るための単なる「砂糖」に過ぎません。私は答えを編集して構造の質問に答えます –