最近我在我的项目中遇到了一个难题,当我开始设计一个复杂的视图时,必须处理许多数据源。该视图的目的是显示与客户个人资料相关的数据,但该个人资料由以下几部分组成:基本信息,涉及的项目,财务数据和联系信息。所有数据必须分组在同一个视图中,并且必须是可更新的。除此之外,在视图的右侧窗格中,还有一些小部件指向与客户信息无关的其他来源。 我解决这个做法是:组合视图的MVC 3设计
- 创建一个混合模式,它是一个混合各种车型像:
personalInfoModel
,cutomerProjectModel
,financialInfoModel
和contactInfoModel
。顺便说一下,我正在使用Microsoft实体框架,因此这里的每个模型都与一个实体一一对应。 有了这种混合模式,我做的主视图(比方说CustomerView)的连接,以便于查看代码的第一行,你可以看到:
<%@ Page ..... Inherits="...MyProject.Models.hybridCustomerModel"
里面的主视图我使用:
<% Html.RenderPartial("UC_BasicInfo"); %> <% Html.RenderPartial("UC_ProjectInfo"); %> <% Html.RenderPartial("UC_FinancialInfo"); %> <% Html.RenderPartial("UC_ContactInfo"); %>
这是因为我想通过用户控件来渲染主视图来简化一些事情。
每个用户控件(¨* .ascx)都指向混合模型,因此我可以毫无问题地在窗体的控件中进行绑定。
在控制器中,事情看起来有点无序。对于每个* .ascx,都有一个操作的方法处理“发布请求”。但是,初始加载或Get请求是在与View Name:CustomerView匹配的唯一操作方法内部进行的。 为了可用性和响应的目的,我使用jquery来发布帖子请求。 但问题是我需要做很多工作将混合模型与Post Request中涉及的纯模型进行映射,因为DATA层只接收与模型创建的每个实体映射的模型。
最后,我正在使用:
<% Html.RenderAction() %>
作为视图右窗格中的Widgets,以便从我使用的混合模型中获取数据。
我想问你在这种情况下是否有一些不同的更好的方法?