Jac*_*zek 16 asp.net razor asp.net-mvc-3
我有两个表:Projects和ProjectsData,我想用join执行查询并在View中获得结果.
在Controller中我有这个代码:
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
}
但它不起作用......
Dar*_*rov 42
在您的视图中,您正在尝试访问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>
}
| 归档时间: | 
 | 
| 查看次数: | 43370 次 | 
| 最近记录: |