因此,在「表格A」中,字段1具有特定的顯示標籤 「表格」具有許多字段,並且每個字段具有根據表格變化的顯示標籤。 表單有一個或多個字段 並非所有表單都需要具有所有字段(即某些表單的字段數可能少於所有字段集)。
因此,如果您可以想象數據庫中的一組表(這些表中的數據可以緩存在內存中,如果需要的話)代表這些數據,然後在呈現特定表單時,您將獲得一組字段及其顯示標籤。然後將顯示標籤綁定到適當的組件很容易。
這是最好的方式來做到這一點,而不是依靠反思。
基本數據結構應該是一個使用表單名稱(或其他標識符)作爲關鍵字的Dictionary。 Disctionary的「value」部分將是另一個使用控件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。在這種情況下,我的表單是否會被強制輸入?以及我的視圖模型看起來如何(如果我從數據庫中解壓字段和標籤)? – Alex 2011-01-27 21:14:44