2013-08-01 52 views
7

我有一個列表,控制器LINQ的不MVC查看工作

List<string> myList = new List<string>(); 
myList.Add(aString); 

ViewBag.linkList = myList; 

然後在查看我試圖做

@ViewBag.linkList.First() 

而且它給我的錯誤: 「System.Collections.Generic.List」不包含定義「第一」

如果我做

@ViewBag.linkList[0]

它工作正常。

我已經把@using System.Linq放在視圖中。我錯過了什麼嗎? Linq是否在視圖內工作?

+2

這不是關於你的答案,只是一個建議。 我認爲最好的辦法不是ViewBag,研究ViewModel .. – yusuf

+0

此外,你的觀點不是這樣的邏輯的地方。 –

回答

9

ViewBag是動態的。 First()IEnumerable<T>上的擴展方法。擴展方法不適用於動態引用。

在致電First()之前,您必須先將您的列表投入IEnumerable<string>

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

注意,普通的IEnumerable是行不通的,因爲.First()沒有爲它定義。

+0

它的工作,謝謝。 –

1

試試看鑄造IEnumerable<T>,像這樣:

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

List<string>

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

的ViewBag是dynamic對象...更具體地說,ExpandoObject。我猜測動態聯編程序很難識別原始類型。

+0

不知怎的,這種轉換不起作用,但@((ViewBag.linkList作爲IEnumerable ).First())起作用。 –

1

您應該通過ViewModel將列表傳遞到視圖中。以最簡單的形式從列表中傳遞列表,例如: return View(myList);

在視圖的頁面頂部添加@model = List<string>。然後你可以使用Model.First()model.First()來獲得你想要的物品。

ViewModels可以創建爲類或結構體,或突出簡單的數據類型,但好處是它們在進入視圖時強類型化。