为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2018-12-11 17:05:06
在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);        }运行再错,信息如下 传请问一下这个怎么解决?
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

第一段代码的错误很明显的,你试图view的强类型是IEnumerable<ArticleViewModel>,而传入的类型却是IEnumerable<Article>,这样明显不对。也就是说IEnumerable<Article> list = _articleRepocitory.GetMany(cr);
这句代码有错,要么改成IEnumerable<ArticleViewModel> list = _articleRepocitory.GetMany(cr);//不过GetMany这个方法的返回值必须支持这样的类型转换

第二段代码问题,你也晓得了是类型不同引起的,但是你还是没把类型改对。 var vm = new ArticleViewModel();
ModelCopier.CopyModel(list, vm);
这个两句代码要这么个修改,var vm = new IEnumerable<ArticleViewModel>();  //这个CopyModel方法我想你要实现的是从IEnumerable<Article>类型转换成IEnumerable<ArticleViewModel>类型,但是从你的代码上看却是从IEnumerable<Article>类型转换成ArticleViewModel,这个就是问题所在。将你的CopyModel这个方法写好,然后var vm = new IEnumerable<ArticleViewModel>();  ModelCopier.CopyModel(list, vm);

这样就差不多了


查看完整回答
反对 回复 2018-12-15
?
守着一只汪

TA贡献1872条经验 获得超3个赞


return View(vm);  这里错了,这里应该传入 IEnumerable<ArticleViewModel> 类型.


查看完整回答
反对 回复 2018-12-15
  • 2 回答
  • 0 关注
  • 462 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信