【发布时间】:2011-06-29 03:56:04
【问题描述】:
最近,当我开始设计一个必须处理许多数据源的复杂视图时,我在项目中遇到了一个丑陋的问题。视图的目的是显示与客户资料相关的数据,但此资料由以下组成:基本信息、涉及的项目、财务数据和联系信息。所有这些数据必须分组在同一个视图中,并且必须是可更新的。除此之外,在视图的右窗格中,还有一些小部件指向与客户信息无关的其他来源。 我解决这个问题的方法是:
- 创建一个混合模型,它混合了各种模型,例如:
personalInfoModel、cutomerProjectModel、financialInfoModel和contactInfoModel。顺便说一句,我使用的是微软实体框架,所以这里的每个模型都与一个实体一一匹配。 -
使用这种混合模型,我建立了与主视图(假设是 CustomerView)的连接,因此在视图代码的第一行中,您可以看到如下内容:
<%@ Page ..... Inherits="...MyProject.Models.hybridCustomerModel" -
在我使用的主视图中:
<% Html.RenderPartial("UC_BasicInfo"); %> <% Html.RenderPartial("UC_ProjectInfo"); %> <% Html.RenderPartial("UC_FinancialInfo"); %> <% Html.RenderPartial("UC_ContactInfo"); %>这是因为我想通过用户控件来简化一些事情来呈现主视图。
每个用户控件 (¨*.ascx) 都指向混合模型,因此我可以毫无问题地在表单的控件中进行绑定。
-
在控制器中,事情看起来有点混乱。对于每个 *.ascx 都有一个处理“发布请求”的操作方法。但是初始加载或获取请求是在唯一与视图名称匹配的操作方法中进行的:CustomerView。 出于可用性和响应性的目的,我使用 jquery 来发出 post 请求。 但问题是我需要做很多工作将混合模型与 Post Request 中涉及的普通模型映射,因为 DATA 层只接收与模型创建的每个实体映射的模型。
最后,我使用:
<% Html.RenderAction() %>作为视图右侧窗格中的小部件,以便从我正在使用的混合模型中获取数据。
我想问你在这种情况下是否有一些不同的更好的方法?
【问题讨论】:
标签: entity-framework asp.net-mvc-3 viewmodel