我有一個相當簡單的數據審計Web應用程序用ASP MVC編寫,它有效地具有用於不同目的的相同模型的兩個視圖。使用HTML助手減少代碼重複
代理視圖 - 由驗證信息的人填寫的表格。此視圖中窗體上的每個字段有3個子字段:
a。原始值 - 呼叫前數據庫的值
b。新的價值 - 如果手機與原始手機不同,手機上提供的價值。
c。操作 - 發生了什麼的一般指示
QC視圖 - 由審查代理視圖中執行的工作的人填寫的表單。此視圖中窗體上的每個字段有5個子字段:
a。原始值 - 與上述相同
b。代理值 - 代理在上面1b中提供的值。
c。 QC值 - 如果代理指定的值不正確,則更正的「新值」。
d。業務代表操作 - 與上述內容相同,只能在此視圖中閱讀
e。質檢行動 - 如果代理人選擇不當,則更正「新行動」。
兩個視圖之間的唯一區別是可用的子字段。我希望能夠使用單個視圖來表示兩個視圖,因爲頁面的整體結構是相同的,只需使用HTML助手來處理子字段的差異即可。我至今2個明顯不同的系列傭工(目前在同一類,但是可以分離)的:
// Agent controls
public static MvcHtmlString AuditControl(this HtmlHelper htmlHelper, string id, string fieldLabel, MvcHtmlString editControl, string cssClass)
public static MvcHtmlString AuditControl(this HtmlHelper htmlHelper, string id, string fieldLabel, string editControl, string cssClass)
public static MvcHtmlString AuditControl<COMPLEX>(this HtmlHelper htmlHelper, string id, string fieldLabel, string cssClass) where COMPLEX : AbstractComplex, new()
// QC controls
public static MvcHtmlString ReviewControl(this HtmlHelper htmlHelper, string id, string fieldLabel, MvcHtmlString editControl, string cssClass)
public static MvcHtmlString ReviewControl(this HtmlHelper htmlHelper, string id, string fieldLabel, string editControl, string cssClass)
public static MvcHtmlString ReviewControl<COMPLEX>(this HtmlHelper htmlHelper, string id, string fieldLabel, string cssClass) where COMPLEX : AbstractComplex, new()
其中第三實現處理多個數據片段組成更復雜的領域(如全名,地址等)。
我考慮過的一種可能的解決方案是將不同類型的控件分成不同的類,它們實現一個通用接口,然後將它們作爲類型參數傳遞給更通用的HTML幫助器。我認爲這會工作,但後來我需要能夠告訴視圖應該使用哪個實現來繪製視圖,這看起來有問題,因爲它似乎模糊了視圖和控制器之間的界限。
看起來很明顯的一種不太吸引人的方法是從控制器傳遞一種管理標誌,該標誌將被泛型(在邏輯上不是類型泛型)工廠幫助程序中使用,並在其中構建邏輯以知道哪一系列使用方法。這樣可以保持模型和視圖不同,但感覺髒,因爲HTML助手不僅僅負責構建HTML。
這是一個合理的情況來打破MVC設計的問題分離還是有更合適的解決方案?
您的解決方案聽起來過於複雜。你正在使用什麼版本的ASP.NET MVC? – SoWeLie
@SoWeLie - 我正在使用MVC 3. –