我正在使用asp .net工作MVC 4。一切顺利,直到我得到错误说
System.InvalidOperationException:传递到字典中的模型项的类型为'System.Data.Linq.DataQuery'1 [FYPManagment.OfferedProject]',但此字典需要类型为'System.Collections.Generic的模型项。 IEnumerable'1 [FYPManagment.Models.SupervisorModel]”。
我搜索了很多但仍然无法正常工作
我的supervisor模型是:
public class SupervisorModel
{
public OfferedProject offerproject { get; set; }
}
我的主管控制器是:
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 :(得分:1)
目前,变量projectdata
仍然是IQueryable
类型的查询表达式。它还没有被评估/执行。 projectdata
的类型与您的视图强类型的类型(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>