MVC视图模型问题:无法访问控制器传递给视图的对象/变量
问题:ViewModel传递到视图后无法访问变量
我尝试把ViewModel里的变量从控制器传到视图,但视图一直访问不到这些变量,相关代码和报错信息如下:
ViewModel代码
public class AuctionViewModels { public List<Auction> AllAuction { get; set; } public List<Auction> PromotedAuction { get; set; } }
控制器Action方法
public ActionResult Index() { AuctionViewModels vmodel = new AuctionViewModels(); vmodel.AllAuction = service.GetAllAuction(); //如需向视图传递多个模型 vmodel.PromotedAuction = service.GetPromotedAuction(); return View(vmodel); }
视图代码
@model List<DealDouble.Web.ViewModels.AuctionViewModels> @foreach (var auction in Model.AllAuction ) { <a href="#"><img class="card-img-top" src="http://placehold.it/700x400" alt=""></a> }
报错信息
CS1061: 'List
' 不包含 'AllAuction' 的定义,也找不到接受第一个参数为 'List ' 类型的扩展方法 'AllAuction'(是否缺少 using 指令或程序集引用?)
问题分析 & 解决方案
这问题其实很直白——你在控制器里传给视图的是单个AuctionViewModels对象,但视图里却错误地把模型声明成了List<AuctionViewModels>(也就是这个类型的集合)。集合本身根本没有AllAuction这个属性,只有单个的AuctionViewModels实例才拥有这个属性,所以编译器自然就报错了。
只需要修改视图里的@model声明,去掉List<>,改成单个对象的类型就行:
@model DealDouble.Web.ViewModels.AuctionViewModels @foreach (var auction in Model.AllAuction ) { <a href="#"><img class="card-img-top" src="http://placehold.it/700x400" alt=""></a> }
这样视图就能正确识别模型类型,访问到AllAuction属性了。
内容的提问来源于stack exchange,提问作者Zubair Farooq
相关产品推荐
相关产品推荐

