显示MVC中2个连接表的数据

时间:2014-06-25 12:59:15

标签: c# asp.net-mvc

我有两个表,我正在对它们执行左连接,我希望结果表显示在我的视图中,任何想法如何做?

这是我的控制器部分

public Actionresult display()
{
    var joindata = (from c in dd.CategoryTbls join n in dd.SubCategoryTbls on c.Id equals n.CategoryId select new { ID=c.Id,CategoryName= c.CategoryName,SubCategoryName=n.SubCategoryName }).ToList();    
    return(joindata);
}

我无法将其显示为强类型视图,因为结果表是两个表的连接,所以任何想法如何做?

3 个答案:

答案 0 :(得分:0)

  

我希望结果表显示在我的视图

这是错误的做法。

在MVC中,您的视图不会显示“表格”,但会显示“模型”。

措辞的改变就是解决方案:为您的联合记录创建一个类,并为该模型创建一个强类型视图。

答案 1 :(得分:0)

一种方法是使用ViewBag

所以不要将模型传递给视图,而是执行此操作。

ViewBag.Joindata = (from c in dd.CategoryTbls join n in dd.SubCategoryTbls on c.Id equals n.CategoryId select new { ID=c.Id,CategoryName= c.CategoryName,SubCategoryName=n.SubCategoryName }).ToList();

然后,您就可以从视图中访问ViewBag 这是非常脏的解决方案。 实施例

@ViewBag.Joindata[0].ID 

将包含第一条记录。

其他选项不是使用dynamic对象来创建代表您的viewModel并使用强类型视图的模型,而是更适合您的问题的解决方案。

   public class ThatSpecificViewModel
{
    public ThatSpecificViewModel(int id, string categoryName, string subCategoryName) 
    {
        this.ID = id;
        this.CategoryName = categoryName;
        this.SubCategoryName = subCategoryName;
    }

    public int ID { get; set; }
    public string CategoryName { get; set; }
    public string SubCategoryName { get; set; }
}

并以这种方式选择

var joindata = (from c in dd.CategoryTbls join n in dd.SubCategoryTbls on c.Id equals n.CategoryId select new ThatSpecificViewModel(c.Id,c.CategoryName,n.SubCategoryName )).ToList();

答案 2 :(得分:0)

你想要的只是一个视图模型......创建一个类似ViewModelResult或类似

的类
public class ViewModelResult    
{      
    public YourTable1 YourTable1{get;set;}      
    public YourTable1 YourTable2 {get;set;}      
} 

然后按如下所示制作代码: -

public Actionresult display()
{
ViewModelResult  joindata = (from c in dd.CategoryTbls join n in dd.SubCategoryTbls on c.Id equals n.CategoryId select new ViewModelResult  { ID=c.Id,CategoryName= c.CategoryName,SubCategoryName=n.SubCategoryName }).ToList();

return view(joindata);
}

并在您的视图中绑定ViewModelResult作为模型,您可以通过foreach等执行任何您想要在网格中显示数据的内容。