2012-04-08 74 views
2

我試圖在MVC中爲其中一個視圖創建強類型模型。該模型是LINQ GroupBy查詢的結果,因此它是下面顯示的類型(通過姓的首字母對員工進行分組)。MVC強類型IQueryable <IGrouping <TKey,TElement >> model

@model IQueryable<IGrouping<string, Employee>> 

我不確定爲什麼,但它不讓我有這種類型的模型。我得到的錯誤消息是: 開頭「<」缺少相應的關閉「>」。這是不正確的。

我知道我可以創建一個視圖特定的模型,並填充它,但我想知道爲什麼這個模型似乎不工作?

回答

1

我不知道爲什麼你會得到這個錯誤,因爲你似乎是用正確的剃刀代碼。通過這個不正確的錯誤信息,有可能在頁面的其他地方實際存在一個錯誤。

一種解決方法,它可以幫助你確定錯誤的真正來源,是創建自己的強類型的模型類,這可能會對這些數據作爲其屬性:

public class EmployeeListViewModel 
{ 
    public IQueryable<IGrouping<string, Employee>> EmployeesByCompanyTitle {get;set;} 
} 

(有那些誰會爭辯說,這是一個更好的方法,因爲你現在可以更容易地添加信息到你的視圖模型。)

+0

頁面的其餘部分沒有錯誤,頁面的itellisense只有在使用這個頂部的@model行時纔會停止工作(就好像該行在語法上是不正確的),所以它的範圍很窄。難道這可能是事實:Iqueryable採用泛型,並且igrouping也採用泛型,所以出於某種原因,這不能用作強類型模型?看起來我可能不得不創建一個特定的視圖模型。 – robasaurus 2012-04-08 17:48:11

+0

@robasaurus:嵌套的泛型應該沒有問題。我在我的機器上試過了,它工作得很好。 Visual Studio是否可能將其視爲Razor視圖?嘗試創建一個特定的視圖模型,看看是否有效。你得到的錯誤,以及它聽起來像你網頁的其餘部分目前不依賴於模型的事實,使我想到也許VS只是把你的內容當作普通的html或aspx/ascx頁面來處理,而不是Razor(.cshtml)頁面。 – StriplingWarrior 2012-04-08 22:45:47

+0

我已經創建了一個視圖模型,並且工作正常。因此,我們將頁面視爲剃刀視圖,因爲我已經使用剃刀語法循環了自定義視圖模型。這是偉大的,但我仍然困惑爲什麼它沒有工作。 – robasaurus 2012-04-09 18:48:04

3

默認情況下,可以在剃刀視圖中直接使用一組非常有限的名稱空間。嘗試將它擴展到完全合格的名字,看看問題是否仍然存在:

@model System.Linq.IQueryable<System.Linq.IGrouping<string, Name.Space.Employee>> 
+0

給了一個去,但它似乎並不是問題。當視圖的第一行作爲該語句時,它會打斷頁面其餘部分的itellisense,就好像它的合成不正確一樣,儘管我100%確定它是正確的,因爲我從我的控制器代碼中複製了它,它返回模型。 – robasaurus 2012-04-08 17:40:42

相關問題