3

我在网上看到的大多数示例都显示了具有单个实体类的 CRUD。

如果我要创建一个 CRM 应用程序,并且其中一个视图需要以只读模式显示客户信息,并且在同一页面上显示联系人、注释、附件、地址,那么控制器应该如何将这些不同的实体传递给视图?
我是否应该创建另一个模型类,它将作为各种其他实体的容器,并用各种实体填充该模型类并传回视图。

在另一种情况下,假设我想在编辑模式下显示客户实体,并且视图具有客户活动状态、客户状态代码、客户满意度下拉菜单的下拉菜单。这些下拉列表中的每一个都有绑定到它们的其他实体集合。因此,同样在这种情况下,控制器应该如何传回具有所有这些实体而不仅仅是客户实体的模型。

我继续阅读 ViewModel 模式,我认为这可能是要走的路,但肯定会感谢更多的指导和指示。

4

1 回答 1

2

你完全正确。创建一个ViewModel代表您的页面需要的对象。

您的第一个场景可能如下所示:

public class CustomerInformationViewModel
{
    IEnumerable<Contact> Contacts { get; set; }
    IEnumerable<Note> Notes { get; set; }
}

在你的控制器中填充这些,然后在你的视图中访问它们。

@foreach (var contact in Model.Contacts)
{
    @Html.DisplayFor(c => c.Name)
}

对于您的第二种情况,完全相同。您想绑定到您的客户属性,但您还需要一些额外的下拉列表集合。

public class CustomerEditViewModel
{
    Customer Customer { get; set; }
    IEnumerable<Status> StatusOptions { get; set; }
    IEnumerable<StateCode> StateCodeOptions { get; set ; }
}

请记住,如果您发现您ModelState在控制器上无效,则需要在控制器中重新填充这些集合。

于 2012-09-29T15:44:54.087 回答