2011-08-31 59 views
-3

我在使用Razor視圖的ASP.NET MVC3項目中使用Linq to SQL。ASP.NET MVC Razor視圖,未正確顯示Linq to SQL相關實體

我的L2S對象似乎在控制器/模型代碼中工作正常;我可以參考和使用我的相關對象的子類集合。但是,在我的剃刀視圖中,我無法這樣做。智能感知識別子類集合:

Model.ChildObjects 

但它無法提供任何代碼完成的ChildObjects對象本身。要使用該集合作爲像這樣的集合:

foreach(var item in Model.ChildObjects) 

導致以下聯錯誤在編輯器:

foreach statement cannot operate on variables of type 
System.Data.Linq.EntitySet<ChildObjectType> because 
System.Data.Linq.EntitySet<ChildObjectType> does not 
contain a public definition for 'GetEnumerator' 

似乎是壞了什麼被從Razor視圖引用。當我嘗試使用這樣的代碼:

@Model.ChildObjects.Count() 

我在執行得到這個編譯錯誤:

The type 'System.Data.Linq.EntitySet`1<T0>' is defined in an assembly that is 
not referenced. You must add a reference to assembly 
'System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 

我並沒有改變在web.config文件(S)爲項目什麼。我最近更新了我的Windows 7 SP1,並更新了我的NuGet ...但我不確定是否會有任何涉及的內容。

回答

0

嘗試在views文件夾的web.config中添加命名空間System.Data.Linq

+0

這沒有幫助;事實上,在編譯相關命名空間不存在的視圖時,它給了我一個錯誤。 –

6

我不知道這個原因,因此,如果有人可以解釋我爲什麼工作的原因,將會留下這個問題。

我發現這個問題:Using System.Data.Linq in a Razor view

在這裏面,有人提到設置參考System.Data.Linq爲「複製本地」 = true。這樣做解決了我在這裏遇到的問題。

0

儘管您似乎已經解決了您的問題,但我認爲潛在的更大問題是您將域模型傳遞給您的視圖。我建議不要這樣做,因爲它會使您的視圖文件特別依賴於您的數據層。

創建包含視圖所需信息的視圖模型會更好。控制器將負責通過數據層選擇數據並將其轉換爲視圖模型,然後您可以將驗證屬性添加到視圖模型中。這是一個更清潔的設計。