2016-09-13 65 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> 
相关问题