如何在单个MVC视图中显示来自多个表的数据

Cun*_*ers 10 asp.net-mvc linq-to-sql

我很难用MVC视图解决以下问题.

我的目标是在单个MVC视图中显示来自多个表的数据.大部分数据来自名为Retailers的表.我还有另一个名为RetailerCategories的表,它存储来自Retailers表的retailerid,以及一个链接到Category表的categoryid.

请注意,RetailerCategories表中的每个retailerid都有多条记录.

在视图中,我想显示零售商列表,并且每个零售商都希望显示适用于他们的类别列表.

实现这一目标的最佳方法是什么?我已经尝试过的一些内容包含在你能帮助解决这个MVC ViewModel问题吗?

然而,这似乎不是正确的方法.

Dar*_*rov 12

您需要一个专门针对此视图需求定制的视图模型.在定义视图模型时,您不应该考虑表格.SQL表在视图中绝对没有意义.根据您需要显示哪些信息并相应地定义视图模型.然后,您可以使用AutoMapper在实际模型和已定义的视图模型之间进行转换.

所以忘记关于表格的所有内容并关注以下句子:

在视图中,我想显示零售商列表,并且每个零售商都希望显示适用于他们的类别列表.

这句话实际上非常好,因为它准确地解释了你的需要.所以,一旦你知道你需要什么,继续进行模型化:

public class CategoryViewModel
{
    public string Name { get; set; }
}

public class RetailerViewModel
{
    public IEnumerable<CategoryViewModel> Categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,您强烈键入您的视图IEnumerable<RetailerViewModel>.从这里开始,您可以轻松地在视图中执行您想要的操作:

显示零售商列表,每个零售商都有一个相关类别列表.

  • @Cunners,我看了你原来的问题.在这个问题中,您认为您正在使用视图模型,但事实并非如此.将模型粘贴为视图模型的属性不是解决方案.我的意思是声明一个带有viewmodel后缀的类,并且将所有模型放在里面并不是正确的方法,因为你的模型不是根据视图的需要量身定制的.所以忘记你的模型,忘记SQL表,考虑这个视图需要什么信息并为这些类建模.这将使您走上正确的轨道,AutoMapper将帮助您进行转换. (3认同)