错误:传入字典的模型项的类型为“.... List”,但此字典需要类型为“... IEnumerable”的模型

时间:2011-06-02 06:50:26

标签: model-view-controller

我在尝试渲染asp.net MVC 3.0应用程序时遇到此错误。 我正在使用DAB Architecture(3个项目) CAFM.Web,CAFM.Business CAFM.Data 项目。

CAFM.Data包含

CAFMEntities:实体框架 ITabMaster:界面 命名空间CAFM.Data.Interfaces {     公共接口ITabMaster     {         TabMaster GetTabMasterById(Int64 id);         IEnumerable FindTabMasterByName(字符串名称);         void AddTabMaster(TabMaster tabmaster);         IEnumerable GetAllTabMaster();     } }

CAFM.Business包含 CAFM.Data的参考 命名空间CAFM.Business.Repositories {     公共类TabMasterRepository:ITabMaster     {         public int colID {get;组; }         public string FirstName {get;组; }         public string LastName {get;组; }

    private CAFMEntities _context;

    public TabMasterRepository()
    {
        //IUnitOfWork unitOfWork = new CAFMEntities();
        _context = new CAFMEntities();
    }

    public TabMasterRepository(IUnitOfWork unitOfWork)
    {
        if (unitOfWork == null)
            throw new ArgumentNullException("unitOfWork");

        _context = unitOfWork as CAFMEntities;
    }

    public IEnumerable<TabMaster> GetAllTabMaster()
    {
        //(extension)List<Movie> IEnumerable<Movie>.ToList<Movie>()
        //List<TabMaster> tabmasters = _context.TabMasters.ToList();
        return _context.TabMasters.ToList() ;// .AsEnumerable<TabMaster>();//.ToList();
        //return tabmasters;
    }

    public TabMaster GetTabMasterById(Int64 id)
    {
        return _context.TabMasters.Where(c => c.colID == id).Single();
    }

    public IEnumerable<TabMaster> FindTabMasterByName(string name)
    {
        return _context.TabMasters.Where(c => c.LastName.StartsWith(name)).AsEnumerable<TabMaster>(); //.ToList();
    }

    public void AddTabMaster(TabMaster tabmaster)
    {
        _context.TabMasters.AddObject(tabmaster);
    }
}

}

CAFM.Web包含 CAFM.Data的参考 命名空间CAFM.Web.Controllers {     公共类TabMasterController:Controller     {         //         // GET:/ TabMaster /

    public ViewResult Index()
    {

        //Error comes in following line. (_context.TabMasters.ToList() is successfully return all the values but error is The model item passed into the dictionary is ... during rendering HTML 
        TabMasterRepository tr = new TabMasterRepository();
        return View(tr.GetAllTabMaster());
    }

}

}

Index.cshtml包含

@model IEnumerable @ {     Layout = null; }     TabMaster     

        电影列表

    

        @ Html.ActionLink(“创建新”,“创建”)     

                                           ID                                           名字                                           姓                               @foreach(模型中的var项)         {                                                   @ Html.DisplayFor(modelItem =&gt; item.colID)                                                       @ Html.DisplayFor(modelItem =&gt; item.FirstName)                                                       @ Html.DisplayFor(modelItem =&gt; item.LastName)                                       }     

错误说明: 传递到字典中的模型项的类型为'System.Collections.Generic.List 1[CAFM.Data.TabMaster]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [CAFM.Business.Repositories.TabMasterRepository]'。

请提供宝贵的建议以解决上述错误。

您的回答将不胜感激! 谢谢, Imdadhusen

1 个答案:

答案 0 :(得分:0)

我不明白您为什么要在视图中使用您的存储库。您是否尝试将模型更改为

@model List<CAFM.Data.TabMaster> 

在MVC中,您应该通过ViewModels

在控制器和视图之间传递数据