2010-12-21 130 views
3

在我看來,當我使用View和Controllers時,控制器只處理它們各自文件夾的第一級。ASP.NET MVC 2:查看子文件夾?

/Controllers/MembersController 
/Views/Members/ 

控制器應該如何處理子文件夾?

/Views/Members/Business 

回答

5

的控制器。如果你想要一個頁面在url/Views/Members/Business/ThePage,你可以用你的global.asax.cs中的路由定義來解決這個問題。如果您需要在子文件夾中放置組織視圖,則應考慮拆分控制器。


響應您的評論更新

簡而言之:是的,路由定義負責選擇哪個控制器應該處理您的請求。

看來,如何設計一個MVC框架的設計使用稍微更詳細的演練可能已經到位。我會保持這個非常基礎,並跳過有關框架內部工作的所有內容。 (這將使一些先進的讀者認爲我說的東西,這平了錯了,請多多包涵 - 我只是故意馬虎...)這裏去...

  1. 當一個請求從瀏覽器提交到您的Web服務器,MVC框架轉到路由定義以查看請求應發送到的位置。它按您定義的順序查看它們,首先排在第一位,因此如果有多個匹配,則只有第一個匹配是相關的。 (因此,您希望保留非常普遍的路線,如默認路線,位於底部)。

  2. 當框架確定路線匹配時,它會查找該路徑應該是什麼控制器和操作路由到。它使用來自url的數據填充所有操作參數,並調用操作方法。

  3. 控制器上的操作方法現在負責「在網絡中心的蜘蛛」,它負責處理所有需要完成的服務以響應響應。這可能包括查詢模型中的數據,調用各種庫方法進行計算或幾乎其他任何事情。控制器方法的最後一步是確定應該返回什麼響應 - 在大多數基本情況下,響應應該是一個視圖,返回的代碼是return View();

  4. 視圖(或任何其他返回的結果)可能從控制器獲取一些數據,然後負責正確地呈現此數據。當視圖完成其工作時,框架將其返回給客戶端。

正如你所看到的,在什麼控制器動作應該被稱爲決定是要早得多(步驟1及2)比兩個什麼返回的結果應該是(步驟3月底)的決定,他們之間甚至不一定相互關聯。

要在您的應用程序中反映此情況,您希望爲控制器和視圖創建與可用控制器及其操作方法(至少可以返回ViewResult)相對應的控制器和視圖的文件夾和文件結構,這個集合反映了你希望你的用戶使用這些控制器動作的URL。通過定義比默認路由更多的路由,您可以獲得各種各樣的url結構,根本不需要更改控制器/操作方法/視圖結構。


如果這一切似乎仍像的決定迷宮,它可能是適當的去http://www.asp.net/mvc/和觀看一些學習視頻或閱讀一些教程。這裏有一些關於框架如何工作的視頻和文本,以及它們如何使用。

+0

好的...所以路由定義決定使用哪個控制器? – dcolumbus 2010-12-21 22:47:51

4

在你的控制器動作,您可以返回從任何文件夾視圖,你想是這樣的:

return View("/Views/Members/Business/Index.aspx", model);