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

时间:2010-11-30 22:45:28

标签: asp.net-mvc linq-to-sql

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

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

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

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

实现这一目标的最佳方法是什么?我尝试过的一些内容包含在Can you help with this MVC ViewModel issue?

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

3 个答案:

答案 0 :(得分:12)

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

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

  

在视图中我想显示一个列表   零售商和每个零售商我   想要显示类别列表   适用于他们。

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

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

public class RetailerViewModel
{
    public IEnumerable<CategoryViewModel> Categories { get; set; }
}

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

  

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

答案 1 :(得分:1)

这可能也有帮助;

video from chris pels

答案 2 :(得分:0)

一步一步做我说的很简单。

  1. 将连接字符串添加到web.config文件

  2. 从解决方案资源管理器中选择模型,并按以下方式添加4个类

    • 第一个表的第一个等级&#34;我使用了有3列的表

      公共课雇用 {     [键]     public int Emp_id {get;组; }     public string Emp_name {get;组; }     public string Emp_city {get;组; } }

    • 我的节奏表第二课

      公共课节奏 {     [键]     public int ID {get;组; }     public int Emp_Id {get;组; }     公共字符串主题{get;组; }     公共字符串爱好{get;组; } }

    现在我在模型文件夹中创建了一个第三个类,它包含了我想要的值来自雇用表和速度表

    public class Alladd
    {
        public int ID { get; set; }
        public int Emp_Id { get; set; }
        public string subject { get; set; }
        public string hobby { get; set; }
        public string Emp_name { get; set; }
        public string Emp_city { get; set; }
    }  
    

    ,最后一个类是datacontext类

    public class DataContext:DbContext
    {
        public DataContext() : base("DefaultConn")//connection string
        {
        }
    
        public DbSet<Employ> Empdata { get; set; }
        public DbSet<tempo> Tempdata { get; set; }
    }
    
  3. 现在转到Home控制器并添加如下代码

    public ActionResult file()
    {
        // IList<tempo> tempi=new List<tempo>();
    
        IEnumerable<Alladd> model = null;
    
        // model = getVerifydetails(id);
        // return View(objcpModel);
        List<Alladd> verify = new List<Alladd>();
    
        cn.Open();
    
        if (cn.State == ConnectionState.Open)
        {
            string query = "select Employ.Emp_name,Employ.Emp_id,Employ.Emp_city,tempo.hobby,tempo.id,tempo.subject from Employ inner join tempo on Employ.Emp_id=tempo.Emp_id;";//joining two table 
            SqlCommand cmd=new SqlCommand(query,cn);
            SqlDataReader dr = cmd.ExecuteReader();
    
            while (dr.Read())
            {
                verify.Add(new Alladd { Emp_name = dr[0].ToString(), Emp_Id= Convert.ToInt32(dr[1].ToString()), Emp_city = dr[2].ToString(), hobby = dr[3].ToString(),ID = Convert.ToInt32(dr[1].ToString()),subject= dr[4].ToString()});//filling values into Alladd class
            }
    
            cn.Close();
        }
    
        return View(verify);
    }
    
  4. 现在最后一步很简单

    1. 转到解决方案资源管理器
    2. 选择views文件夹并左键单击它并选择添加视图
    3. 现在将其命名为&#34; file&#34;我们把它交给控制器
    4. 检查创建强类型视图
    5. 从下拉列表中选择模型类 - &gt; Alladd
    6. 选择脚手架模板 - >列表
    7. 点击添加按钮
  5. 现在你已经完成了

    快乐的编码......