【问题标题】:Displaying multiple lists of data in a view (i.e. CustomerContacts, CustomerLocations)在视图中显示多个数据列表(即 CustomerContacts、CustomerLocations)
【发布时间】:2015-01-07 19:17:50
【问题描述】:

我有一个 CustomersController,在 Detail.cshtml 视图中我需要显示该客户的联系人列表和该客户的位置列表。我有一个 Detail(int? id) ActionResult 并且我可以从控制器内访问我的 CustomerService。截至目前,在我的 Detail ActionResult 中,我能够做到:

var cust = _custService.GetCustomerById(id);
return View(cust);

如何建议将我的其余列​​表显示在视图中。我想我会在我的 CustomerService 中创建一个 GetContacts(customerID)、GetLocations(CustomerID),然后像上面调用 GetCustomerByID 一样调用它们。如果我这样做,我将如何访问这些列表。

接下来我考虑的可能是创建一个 ViewModel,它包含所有基本客户属性,例如 customer.Name、customer.Phone,但随后我试图弄清楚如何确保 ViewModel 具有客户的联系人和位置.我是否只需向 ViewModel 添加 2 个属性,例如 customer.contacts 和 customer.locations,因为 EF6 将使它们可供我使用?

关于在视图中获取与实体相关的多个信息列表的最佳方法有什么建议吗?客户联系人和客户位置都是一对多的

【问题讨论】:

    标签: asp.net asp.net-mvc controller asp.net-mvc-5 repository


    【解决方案1】:

    如您所想,最佳做法是使用视图模型来传输数据。

    public class CustomerDetailViewModel {
        public string Name { get; set; }
        public string Phone { get; set; }
        public List<Contact> Contacts { get; set; }
        public List<Location> Locations { get; set; }
    }
    

    【讨论】:

    • 这完全有道理,感谢您的回复。虽然,我不完全理解将这些列表属性添加到我的视图模型实际上如何让我访问单个客户的位置和联系人。例如,如果我执行 customer.GetByID(1) 然后执行 var contacts = customer.Contacts 这到底是如何自动处理的?顺便说一句,我使用的是 EF6DfFirst,但我创建了所有实际使用的个人 Dto。这些列表属性应该从一开始就在我的 Dtos/POCO 中,而不是创建视图模型?
    • 从一开始就应该在 Dto 内部。但是,当您只想从 Customer 模型访问某些属性时,视图模型是一个不错的方法。你可以在这里阅读更多信息:mikesdotnetting.com/article/188/…
    • 谢谢!它应该是虚拟属性还是实际列表?
    猜你喜欢
    • 2013-08-22
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多