完整代码 - 强类型Models.Error消息

时间:2011-06-16 19:39:11

标签: asp.net-mvc model-view-controller asp.net-mvc-3 models

型号:(文件名:Class1.cs)

namespace Project
{
    public class Class1

   {
      // attributes defined : title, date etc
   }


    public class Class1DBContext : DbContext

   {

     public DbSet<Class1> Class1Table{ get; set; }

   }

    public class Class2

   {
       // attributes defined : Name, Location etc

   }

    public class Class2DBContext : DbContext

   {
         public DbSet<Class2> Class2Table{ get; set; }
   }

   public class ParentView

   {
        public Class1 Class1{ get; set; }
        public Class2 Class2{ get; set; }
   }

}

在Class1Controller.cs文件中:

namespace Project.Controllers
{ 
   public class Class1Controller : Controller
   {
       private Class1DBContext db = new Class1DBContext();


    public ViewResult Index()
    {
        return View(db.Class1Table.ToList());
    }
 }  

在Index.cshtml中:

Index view:

@model IEnumerable<Project.Models.ParentView>


@{
   ViewBag.Title = "List";
 }

 <div style="float:left;">
 <h1 style="color:Black;" >List</h1>
 </div>
 <div>
 @foreach (var item in Model)
 {
    <tr>
       <td>
         @Html.DisplayFor(modelItem => item.Class1.Title)
       </td>

       <td>
          @Html.DisplayFor(modelItem => item.Class1.Description)
       </td>
     </tr>
   }

</div>
<div>
   @{Html.RenderPartial("_PartialNew");}

</div>
部分视图代码中的

(partialNew.cshtml):

  @model IEnumerable<Project.Models.ParentView>

  @foreach (var item in Model) 
   {
   <tr>
       <td>
          @Html.DisplayFor(modelItem => item.Class2.Name)
       </td>
       <td>
           @Html.DisplayFor(modelItem => item.Class2.Location)
       </td>
    </tr>
   }  

错误讯息:

传递到字典中的模型项的类型为'System.Collections.Generic.List 1[Project.Models.Class1]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [Project.Models.ParentView]'。

2 个答案:

答案 0 :(得分:2)

更改要使用IEnumerable的类,例如:

public class ParentView  
{ 
  public IEnumerable<Class1> Class1{ get; set; }
  public IEnumerable<Class2> Class2{ get; set; } 
}

删除IEnumerable,使其显示为:

@model Project.Models.ParentView

答案 1 :(得分:1)

将Class1对象列表传递给需要ParentView对象列表的视图。这里的错误信息非常清楚。

你的问题到底是什么?

编辑 -

您需要将正确的类型返回到视图,可能是:

public ViewResult Index()
{
    var pv = new ParentView();
    pv.Class1 = db.Class1Table.ToList();
    pv.Class2 = db.Class2Table.ToList();

    return View(pv);
}