2012-05-16 49 views
15

在ASP.NET Webform中,01​​是放置代碼並在運行時使用它的標準文件夾。但我認爲這個文件夾在ASP.NET MVC中有點不同,我的問題是:ASP.NET MVC 3和App_Code文件夾

  • 我應該在ASP.NET MVC中將我的代碼(擴展方法,助手,...)放在哪裏。當我將代碼存儲在App_Code文件夾中時,我無法在controller中使用主題,但它們在views中正常工作。

  • 關於實體框架,同樣的問題,我應該在哪裏把EDMXTT文件。 我不使用代碼優先

更新:

一些搜索後,終於我創造了我的解決方案新類庫項目,代碼適用於所有controllersviews我仍然不知道爲什麼在App_Code的代碼是不是在控制器

+1

要在控制器中使用app_code類,請點擊此處http://stackoverflow.com/questions/1222281/app-code-classes-not-accessable-asp-net – yayadavid

+1

App_Code類是在應用程序初始化期間編譯的,因此在編譯時他們不可用。 –

+0

App_Code文件夾將阻止你發佈預編譯的MVC項目(以防止第一頁命中等待)並且會拋出錯誤'「目錄'/ /App_Code /'是不允許的,因爲應用程序是預編譯的'' – Muflix

回答

31

我有同樣的問題,我的類Utility.cs無法識別我的MVC項目。我將Build Action「Content」更改爲「Compile」,這解決了我的問題。 希望有所幫助。

+1

如果我在我的項目中這樣做,我會得到:「以下方法或屬性之間的調用不明確」 – developer82

+0

非常感謝你:) –

+2

這打破了App_Code的目的。 App_Code存在,您可以將代碼文件放在那裏,並讓它們在運行時動態編譯。即使他們不是項目的一部分,也不需要單獨對它們編譯構建操作。 – mare

0

好,請嘗試下載一些已有的開源項目。其中之一是相當複雜的,但很冷靜,如果你會得到對它的理解 - orchard

最好的做法是移動這樣的邏輯來DAL(數據訪問層)或BLL(業務邏輯層)。取決於你的應用程序的複雜性。

2

我建議從this tutorial開始。它首先使用EF代碼,但如果您願意(提示:Models文件夾),您可以簡單地將代碼DbContext替換爲正常的edmx ObjectContext

App_Code是專用於網站項目。國際海事組織,這是一個可怕的方式來組織所有網站,但最簡單的網站。一個MVC項目是一個Web應用程序項目,所以沒有App_Code和你的類可以定義幾乎任何地方。

10

App_Code在網站項目中是必需的,因爲它具有特殊的含義。這意味着「不要將這些文件提供給Web瀏覽器」。在ASP.NET MVC中,在大多數情況下文件不會直接提供給瀏覽器,所以App_Code不是必需的。您可以將代碼文件放在任何您想要的文件夾中,因爲這些文件被編譯爲DLL並且通常不會發布到網站本身。

使用獨立庫也是一個很好的解決方案。

+0

我有同樣的問題。我應該在哪裏把我的代碼不包含在DLL中? Web應用程序中仍有一些代碼。好的,讓我們假設我可以把代碼文件放在任何我想要的地方。 Web開發人員期望代碼是否存在一些標準的位置? App_Code文件夾?助手文件夾?我注意到在MS的一些例子中,有像Helpers和Models這樣的文件夾。 – qub1n

+0

@ qub1n - 你爲什麼會有不在DLL中的代碼?即使代碼隱藏中的代碼也會被編譯成我可以的DLL –

+0

。那麼最好的做法是在Web應用程序中除了Global.asax.cs之外真的沒有包含代碼的單個文件? – qub1n

-1

對於那些不想要第二個項目/類庫,只想爲幾個c#類創建簡單文件夾的人,我建議使用「App_Classes」。

+0

請告訴我更多。如果你寫了一個'App_Classes'的介紹和如何使用它,這將會是一個非常棒的答案。 –

1

沒有人真正解釋爲什麼App_Code首先存在。這是您放置代碼文件以獲取動態編譯(運行時)的地方。這是App_Code的第一個原因,也是它的特殊之處。你可以把代碼放在你想要的任何文件夾中,但是你必須用編譯動作來標記它,而在App_Code中編譯並不是必需的,事實上,App_Code中的大多數文件甚至都不是項目的一部分。

它也可以在ASP.NET MVC項目中工作,您只需使用.cshtml擴展名爲您的代碼文件命名即可。

+0

請向我解釋「Startup.cs」在App_Code中應該如何運作? – BerggreenDK