2017-10-12 59 views
0

我已经加入了两个表(Projects,Task_Distribution),并将这些值传递给View作为viewbag。但我无法访问视图中的值(例如:@ item.Project_Id),如果我像@item一样编写,它将显示如下结果,如This image在视图中传递对象的值时遇到困难asp.net MVC

如何才能访问该值?

这里是我的控制器代码:

public class TableController : Controller 
    { 
     // GET: Table 
      public ActionResult Table() 
     { 
      Database_testEntities1 db1 = new Database_testEntities1(); 
      List<Project> p = new List<Project>(); 
      List<Task_Distribution> t = new List<Task_Distribution>(); 
      var query = (from PI in db1.Projects join TI in 
    db1.Task_Distribution on PI.Project_Id equals TI.Project_Id select new { PI.Project_Id, TI.Employee_Id }).ToList(); 
     ViewBag.table = query; 
     return View(); 
    } 
} 

这是我的看法

@{ 
    ViewBag.Title = "Table"; 
} 

<h2>Table</h2> 
<table> 
    @foreach (var item in ViewBag.table) 
    { 

     <tr> 
      <td> 
       @item 
      </td> 
     </tr> 

    } 

</table> 

你们能不能给我一个解决方案吗?

+2

因为'选择新{PI.Project_Id,TI.Employee_Id}'创建(含2个属性)的匿名对象的集合。使用包含你想要的2个属性的视图模型,并将查询投影到那个('select new YourViewModel {...}')。并将模型传递给视图(不要使用'ViewBag'),然后将其'foreach(模型中的var项){​​.item.yourProperty'....} –

回答

2

请参阅您的LINQ表达的这一部分,

select new { PI.Project_Id, TI.Employee_Id } 

您投影结果的匿名对象。所以你在ViewBag中有这些匿名对象的列表。当您遍历它们并执行该代码@item,剃刀将拜会了ToString方法,使属性名和值(这是你所看到的)

您可以创建一个视图模型来表示这个数据,做使用

public class ProjectEmployeeVm 
{ 
    public int ProjectId { set;get;} 
    public int EmployeeId { set;get;} 
} 

现在在你的LINQ表达,

select new ProjectEmployeeVm { ProjectId = PI.Project_Id,EmployeeId = TI.Employee_Id } 

现在,在您看来,您可以用投你viewbag项目这个视图模型的列表的投影

@foreach (var item in ViewBag.table as List<ProjectEmployeeVm>) 
{ 
    <p>@item.ProjectId<p> 
    <p>@item.EmployeeId <p> 
} 

此外,既然您有一个视图模型,为什么不使用它来传输数据查看,而不是使用动态视图袋,这是容易出错。

var items = (from PI in db1.Projects join TI in 
       db1.Task_Distribution on PI.Project_Id equals TI.Project_Id 
       select new ProjectEmployeeVm { ProjectId = PI.Project_Id, 
              EmployeeId = TI.Employee_Id 
      }).ToList(); 
return View(items); 
在你看来

现在,

@model List<ProjectEmployeeVm> 
@foreach (var item in Model) 
{ 
    <p>@item.ProjectId<p> 
    <p>@item.EmployeeId <p> 
}