Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用linq从两个表(联接)中获取数据,并将结果返回到视图中_Asp.net_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net 使用linq从两个表(联接)中获取数据,并将结果返回到视图中

Asp.net 使用linq从两个表(联接)中获取数据,并将结果返回到视图中,asp.net,asp.net-mvc-3,razor,Asp.net,Asp.net Mvc 3,Razor,我有两个表:Projects和ProjectsData,我想用join执行查询并在视图中获得结果 在控制器中,我有以下代码: ViewBag.projectsData = (from pd in db.ProjectsData join p in db.Projects on pd.ProjectId equals p.ID where pd.UserNam

我有两个表:Projects和ProjectsData,我想用join执行查询并在视图中获得结果

在控制器中,我有以下代码:

ViewBag.projectsData = (from pd in db.ProjectsData
                                   join p in db.Projects on pd.ProjectId equals p.ID
                                   where pd.UserName == this.HttpContext.User.Identity.Name 
                                   orderby p.Name, p.ProjectNo
                                   select new { ProjectData = pd, Project = p });
我应该在视图中使用什么来提取这些数据。我试过:

@foreach (var item in ViewBag.projectsData)
{
    @item.pd.UserName
}

但它不起作用…

在您的视图中,您试图访问
pd
属性,但该属性不存在。该属性称为
ProjectData

尽管如此,我强烈建议您使用视图模型和强类型视图,而不是
ViewBag
。通过这种方式,您还可以在视图中获得Intellisense,这将帮助您选择正确的名称

因此,您可以从定义一个视图模型开始,该模型将保存视图所需的所有信息:

public class MyViewModel
{
    public ProjectData ProjectData { get; set; }
    public Project Project { get; set; }
}
然后在控制器内填充此视图模型并传递到视图:

public ActionResult Index()
{
    var viewModel = 
        from pd in db.ProjectsData
        join p in db.Projects on pd.ProjectId equals p.ID
        where pd.UserName == this.HttpContext.User.Identity.Name 
        orderby p.Name, p.ProjectNo
        select new MyViewModel { ProjectData = pd, Project = p };
    return View(viewModel);
}
最后,在强类型视图中使用视图模型:

@model IEnumerable<AppName.Models.MyViewModel>
@foreach (var item in Model)
{
     <div>@item.ProjectData.UserName</div>
}
@model IEnumerable
@foreach(模型中的var项目)
{
@item.ProjectData.UserName
}

谢谢。这也对我的视图模型有所帮助。因此,我可以在部分视图中显示两个表数据,并在另一个数据库表视图中显示该视图。我也这样做了,但我收到了一个异常:[InvalidOperationException:传递到字典中的模型项的类型为'System.Linq.Enumerable+d_u37
4[f_uAnonymousType7
2[Auction,Winner],Auctioneer,Int32,f_uAnonymousType8
5[String,DateTime,Decimal,String,String]],但这本词典需要一个类型为“System.Collections.Generic.IEnumerable”的模型项。[/code>1[teawOnlineArtworkAuction.enties.AuctionWinner].]似乎没有简单的方法,我们无法避免手动编码转换,请看这篇文章: