猿问

MVC3中,使用ViewModel出错,有错误信息,困惑很久,麻烦大侠们搭把手。

在ArticleController中名为Index的ActionResult点右键,添加VIEW,名称为Index,创建强类型视类,Model Class设为ArticleViewModel,选择List模板,运行出错,

刚开始,ActionResult代码如下:

 public ActionResult Index()
        {
            ICriteria cr = new EqualCriteria("CommentEnable", true);
 
            IEnumerable<Article> list = _articleRepocitory.GetMany(cr);
            return View(list);
        }

运行错误信息:
 
传入字典的模型项的类型为“System.Data.Objects.ObjectQuery`1[EIS.Models.Article]”,但此字典需要类型“System.Collections.Generic.IEnumerable`1[EIS.Models.ArticleViewModel]”的模型项。
 

代码如下:

 public ActionResult Index()
        {
            ICriteria cr = new EqualCriteria("CommentEnable", true);
            IQueryable<Article> list = _articleRepocitory.GetMany(cr);
            var vm = new ArticleViewModel();
            ModelCopier.CopyModel(list, vm);
            return View(vm);
        }

运行再错,信息如下

 

请问一下这个怎么解决?


茅侃侃
浏览 463回答 2
2回答

SMILET

第一段代码的错误很明显的,你试图view的强类型是IEnumerable<ArticleViewModel>,而传入的类型却是IEnumerable<Article>,这样明显不对。也就是说IEnumerable<Article> list = _articleRepocitory.GetMany(cr);这句代码有错,要么改成IEnumerable<ArticleViewModel>&nbsp;list = _articleRepocitory.GetMany(cr);//不过GetMany这个方法的返回值必须支持这样的类型转换第二段代码问题,你也晓得了是类型不同引起的,但是你还是没把类型改对。&nbsp;var vm = new ArticleViewModel();ModelCopier.CopyModel(list, vm);这个两句代码要这么个修改,var vm = new IEnumerable<ArticleViewModel>();&nbsp; //这个CopyModel方法我想你要实现的是从IEnumerable<Article>类型转换成IEnumerable<ArticleViewModel>类型,但是从你的代码上看却是从IEnumerable<Article>类型转换成ArticleViewModel,这个就是问题所在。将你的CopyModel这个方法写好,然后var vm = new IEnumerable<ArticleViewModel>();&nbsp; ModelCopier.CopyModel(list, vm);这样就差不多了

守着一只汪

return View(vm);&nbsp; 这里错了,这里应该传入 IEnumerable<ArticleViewModel> 类型.
随时随地看视频慕课网APP
我要回答