控制器应该如何将不同的实体或集合传回视图

时间:2012-09-29 15:32:57

标签: asp.net-mvc asp.net-mvc-3

我在网上看到的大部分样本都显示了单实体类的CRUD。

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

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

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

1 个答案:

答案 0 :(得分: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无效,则需要在控制器中重新填充这些集合。