2016-09-13 38 views
0

我正在使用asp.net編寫MVC 4。一切都很好,直到我得到的錯誤說傳入字典的模型項目類型爲「System.Data.Linq.DataQuery」

System.InvalidOperationException:傳遞到字典的模型項的類型爲「System.Data.Linq.DataQuery'1 [FYPManagment.OfferedProject]」,但這需要字典一個'System.Collections.Generic.IEnumerable'1 [FYPManagment.Models.SupervisorModel]'類型的模型項目。

我搜索了很多,但仍然無法正常

工作我supervisorModel是:

public class SupervisorModel 
{ 
    public OfferedProject offerproject { get; set; } 
} 

我supervisorController是:

public class SupervisorController : Controller 
{ 
    DataContextDataContext dc = new DataContextDataContext(); 
    public ActionResult ViewProject() 
    { 
     var projectdata = (from s in dc.OfferedProjects 
          where s.FK_sup_ID == 2 
          select s); 
     return View(projectdata); 
    } 
} 

我的看法是:

@using FYPManagment; 
@{ 
    List<OfferedProject> projectdata = (List<OfferedProject>)ViewData["projectdata"]; 
    Layout = null; 
} 
@model IEnumerable<FYPManagment.Models.SupervisorModel> 
<!DOCTYPE html> 
AND 
@foreach (var item in Model) 
{ 
    <tr> 
     <td>@item.offerproject.proj_title</td> 
     <td>@item.offerproject.proj_description</td> 
     <td><a href="#">Send Request</a></td>  
    </tr> 
} 
+0

請注意,模型 - 視圖 - 控制器標記是關於模式的問題。 ASP.NET-MVC實現有一個特定的標籤。 –

回答

0

目前可變projectdata仍然是IQueryable類型的查詢表達式。尚未評估/執行。項目數據的類型與您的視圖強類型爲(IEnumerable<SupervisorModel>)的類型不同。這就是你得到類型不匹配錯誤的原因。

首先,更新您的操作方法以返回執行查詢表達式的結果。您可以在查詢表達式上調用ToList()方法。

public ActionResult ViewProject() 
{ 
    var projectdata = (from s in dc.OfferedProjects 
          where s.FK_sup_ID == 2 
          select s).ToList(); 
    return View(projectdata); 
} 

現在確保您的視圖被強制類型爲您從動作方法發送的相同類型。

@model IEnumerable<FYPManagment.Models.OfferedProject> 
<table> 
@foreach (var item in Model) 
{ 
    <tr> 
     <td>@item.offerproject.proj_title</td> 
     <td>@item.offerproject.proj_description</td> 
    </tr> 
} 
</table> 
相關問題