我在网上看到的大多数示例都显示了具有单个实体类的 CRUD。
如果我要创建一个 CRM 应用程序并且其中一个 View 需要以只读模式显示客户信息并在同一页面上显示联系人、注释、附件、地址, Controller 应如何将这些不同的实体传递给查看?
我是否应该创建另一个模型类,它将成为各种其他实体的容器,并用各种实体填充该模型类并传回 View 。
在另一种情况下,假设我想在编辑模式下显示客户实体,并且 View 具有客户事件状态、客户状态代码和客户满意度下拉菜单的下拉菜单。这些下拉列表中的每一个都有绑定(bind)到它们的其他实体集合。因此,同样在这种情况下, Controller 应该如何传回包含所有这些实体而不仅仅是客户实体的模型。
我继续阅读 ViewModel 模式,我认为这可能是要走的路,但肯定会感谢更多指导和指示。
最佳答案
你完全正确。创建一个 ViewModel
来表示您的页面所需的对象。
您的第一个场景可能如下所示:
public class CustomerInformationViewModel
{
IEnumerable<Contact> Contacts { get; set; }
IEnumerable<Note> Notes { get; set; }
}
将这些填充到您的 Controller 中,然后在您的 View 中访问它们。
@foreach (var contact in Model.Contacts)
{
@Html.DisplayFor(c => c.Name)
}
对于您的第二种情况,完全相同。您想要绑定(bind)到您的客户属性,但您还需要一些额外的下拉列表集合。
public class CustomerEditViewModel
{
Customer Customer { get; set; }
IEnumerable<Status> StatusOptions { get; set; }
IEnumerable<StateCode> StateCodeOptions { get; set ; }
}
请记住,如果您发现您的 ModelState
在 Controller 中无效,您将需要在 Controller 中重新填充这些集合。
关于asp.net-mvc - Controller 应该如何将不同的实体或集合传回 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12654039/