2017-10-12 52 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> 
}