2011-01-26 37 views
1

我有要求爲旅遊公司構建「搜索」表單。此搜索表單將用於搜索不同的旅遊組件,如航班,酒店,汽車等。多視圖搜索表單(ASP.NET MVC 2)

表單中的大部分字段都是常見的(例如旅行日期,出發地和目的地城市等),但所有組件還包含一些特定組件的特定字段(例如商務/首次/經濟艙&航班搜索的不間斷航班指標)。

儘管大多數字段都是常見的,但它們需要顯示特定於組件的標籤......例如:「旅行日期」會在酒店搜索表單上顯示「登記入住日期:&」因爲他們會在航班搜索表單上說「出發&返程日期」。

什麼是設計搜索表單的最佳方法,該搜索表單將顯示帶有組件特定標籤的字段,還提供了將字段映射/關聯到組件的方法(所有組件類型的常用字段和組件相關組件的特定字段)?是否有類似於數據註釋來實現這種行爲?

回答

0

因此,在「表格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); 

當然,當數據來自數據庫中的實際人口的代碼會有所不同,但這個想法是一樣的。現在你可以在內存中選擇緩存這個結構,但是除非性能問題,否則我不會這麼做,因爲數據庫實際上將這些「數據」緩存在內存中,而且數據庫引擎很可能不會碰到硬盤在第一次之後。當然,你的數據庫服務器上有足夠的內存空間。

+0

謝謝Shiv Kumar。在這種情況下,我的表單是否會被強制輸入?以及我的視圖模型看起來如何(如果我從數據庫中解壓字段和標籤)? – Alex 2011-01-27 21:14:44