Linq在MVC View中不起作用

时间:2013-08-01 00:03:00

标签: c# asp.net-mvc linq

我在控制器中有一个List

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放入视图中。我错过了什么吗? Linq是否在视图内工作?

3 个答案:

答案 0 :(得分:9)

ViewBag是动态的。 First()IEnumerable<T>上的扩展方法。扩展方法不适用于动态引用。

在致电IEnumerable<string>之前,您必须先将列表转换为First()

@((ViewBag.linkList as IEnumerable<string>).First())

请注意,普通IEnumerable无法使用,因为.First()未定义。

答案 1 :(得分:2)

尝试将其投射到IEnumerable<T>,如下所示:

@((IEnumerable<string>)ViewBag).linkList.First()

List<string>

@((List<string>)ViewBag).linkList.First()

ViewBag是dynamic对象...更具体地说,是ExpandoObject。我猜测动态活页夹难以识别原始类型。

答案 2 :(得分:1)

您应该通过ViewModel将列表传递到视图中。在其最简单的形式中,从控制器传递视图中的列表,例如。 return View(myList);

在视图中,在页面顶部添加@model = List<string>。然后,您可以使用Model.First()model.First()来获取所需的项目。

ViewModels可以创建为类或结构,也可以创建简单的数据类型,但好处是它们在进入View时会被强类型化。