我有一个相当简单的数据审计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. –