asp.net-mvc - Controller 应该如何将不同的实体或集合传回 View

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

我在网上看到的大多数示例都显示了具有单个实体类的 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/

相关文章:

asp.net-mvc - 由 javascript 更新的 asp.net mvc 禁用文本框不会发布新值

asp.net - Visual Studio 2012 Web Publish 不复制文件

asp.net-mvc - 在 Web API 中执行操作后更改返回的对象值

c# - asp.net web api - 如何验证用户身份

asp.net-mvc - 从 ASP.NET MVC 3 中的必需属性继承时,客户端验证不起作用?

asp.net - ninject,在ninject初始化的RegisterServices中注入(inject)Membership.Provider

asp.net-mvc - 将 MVC API 与来自 VBA 的 Windows 身份验证一起使用

c# - 获取特定列的 Entity Framework Lambda 表达式

c# - 将 Javascript 写入 Response.OutputStream

javascript - 如何将字符串转换为 JSON 对象