林克没有';不能在MVC视图中工作
本文关键字:MVC 视图 工作 不能 林克 | 更新日期: 2023-09-27 18:25:54
我在控制器中有一个列表
List<string> myList = new List<string>(); myList.Add(aString); ViewBag.linkList = myList;
然后在视图中,我正在尝试进行
@ViewBag.linkList.First()
它给了我一个错误:"System.Collections.Generic.List"不包含"First"的定义
如果我做
@ViewBag.linkList[0]
它运行良好。
我已经在视图中放置了@using System.Linq
。我是不是错过了什么?林克在视野内工作吗?
ViewBag
是动态的。CCD_ 3是对CCD_。扩展方法不适用于动态引用。
在调用First()
之前,必须先将列表强制转换为IEnumerable<string>
。
@((ViewBag.linkList as IEnumerable<string>).First())
请注意,普通IEnumerable
将不起作用,因为没有为其定义.First()
。
尝试将其强制转换为IEnumerable<T>
,如下所示:
@((IEnumerable<string>)ViewBag).linkList.First()
或至List<string>
:
@((List<string>)ViewBag).linkList.First()
ViewBag是一个dynamic
对象。。。更具体地,ExpandoObject
。我猜动态绑定器很难识别原始类型。
您应该通过ViewModel将列表传递到视图中。以最简单的形式将列表从控制器传递到视图中,例如return View(myList);
在视图中,在页面顶部添加@model = List<string>
。然后可以使用Model.First()模型。First()获取所需项目。
ViewModel可以创建为类或结构,也可以突出简单的数据类型,但好处是它们在进入视图时是强类型的。