传递到字典中的模型项是'System.Data.Linq.DataQuery`类型

时间:2016-09-13 19:13:07

标签: asp.net-mvc

我正在使用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>
}

1 个答案:

答案 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>