我有两个表: 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
}
但它不起作用。
发布于 2011-03-06 07:11:52
在您的视图中,您正在尝试访问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>
}
https://stackoverflow.com/questions/5207382
复制相似问题