2012-10-25 55 views
13

我正在開發ASP.NET MVC 3項目。爲了簡單起見,我想在子文件夾中劃分控制器,模型和視圖。我能夠使用控制器和模型做到這一點,但是當我創建一個視圖時,它會自動創建根文件夾Views,有什麼辦法可以解決這個問題嗎?在ASP.NET MVC 3子文件夾中添加視圖

例如。我可以創建

模型類如,

Models/Finance/Bank.cs 
Models/Finance/Finance.cs 
Models/Production/Production.cs 

控制器,

Controllers/Finance/BankController/Create 
Controllers/Finance/BudgetController/Create 
Controllers/Production/ProcessController/Create 

但其中i試圖創建視圖爲上述行動,它建立在,

Views/Bank/Create.aspx 
Views/Budget/Create.aspx 
Views/Process/Create.aspx 

我想要它應該像,

Views/Finance/Bank/Create.aspx 
Views/Finance/Budget/Create.aspx 
Views/Prodution/Process/Create.aspx 

有沒有什麼辦法可以在與控制器和模型創建的子文件夾相同的子文件夾中創建視圖?謝謝!

+0

東西不對。 'CustomerController'不應該需要兩個文件夾。 –

回答

17

模型和控制器是編譯的源文件。他們被編譯成一個DLL,因此,他們可以從字面上放在項目的任何地方,它不會有所作爲。這些類沒有在文件系統中的位置概念,因爲它們在編譯後不存在於文件系統中。

觀點,另一方面是不同的。它們是部署到服務器並在運行時加載和解析的文本文件,因此框架必須知道在哪裏找到它們。

工具將始終在〜\ Views \ Controller文件夾(或〜Areas \ AreaName \ Controller文件夾)中創建視圖。之後,您可以將它們移動到任意位置,但必須將整個文件夾路徑提供給View()方法(包括.cshtml)。或者你將不得不實現一個自定義的ViewEngine,在你想要的地方設置搜索路徑。

0

視圖的命名是根據控制器的名稱,你應該遵循規則。
如果你想創建Views/Admin/Create,那麼你的CustomerController.cs應該被命名爲AdminController.cs

+2

這是如何轉化爲子控制器的?例如。 'Views/Admin/Customers/Create',我有一個'AdminController'和一個'CustomersController'子控制器。 – Dan

21

以下步驟爲我工作,

  1. 創建子文件夾,您在Views(根文件夾)想要的。在我的情況下,它是財務&生產。

  2. 只需將Views中自動創建的文件夾拖動到適當的子文件夾中即可。在我的情況Bank & BudgetFinanceProcessProduction

  3. 當你從控制器動作返回一個視圖,給出的觀點是完整路徑,

    returnView("~/Views/Finance/Bank/Create.aspx")

    returnView("~/Views/Finance/Budget/Create.aspx")

    returnView("~/Views/Production/Process/Create.aspx")

+3

這就是@Mystere Man建議的,沒有理由寫另一個答案,只需將他的答案標記爲已接受 – 2013-10-29 09:30:00

+1

它也適用於剃刀cshtml。例如:「return View(」〜/ Views/SomeSubFolder/Login.cshtml「); – granadaCoder

相關問題