在我看來,當我使用View和Controllers時,控制器只處理它們各自文件夾的第一級。ASP.NET MVC 2:查看子文件夾?
/Controllers/MembersController
/Views/Members/
控制器應該如何處理子文件夾?
/Views/Members/Business
在我看來,當我使用View和Controllers時,控制器只處理它們各自文件夾的第一級。ASP.NET MVC 2:查看子文件夾?
/Controllers/MembersController
/Views/Members/
控制器應該如何處理子文件夾?
/Views/Members/Business
的控制器不。如果你想要一個頁面在url/Views/Members/Business/ThePage
,你可以用你的global.asax.cs中的路由定義來解決這個問題。如果您需要在子文件夾中放置組織視圖,則應考慮拆分控制器。
響應您的評論更新。
簡而言之:是的,路由定義負責選擇哪個控制器應該處理您的請求。
看來,如何設計一個MVC框架的設計使用稍微更詳細的演練可能已經到位。我會保持這個非常基礎,並跳過有關框架內部工作的所有內容。 (這將使一些先進的讀者認爲我說的東西,這平了錯了,請多多包涵 - 我只是故意馬虎...)這裏去...
當一個請求從瀏覽器提交到您的Web服務器,MVC框架轉到路由定義以查看請求應發送到的位置。它按您定義的順序查看它們,首先排在第一位,因此如果有多個匹配,則只有第一個匹配是相關的。 (因此,您希望保留非常普遍的路線,如默認路線,位於底部)。
當框架確定路線匹配時,它會查找該路徑應該是什麼控制器和操作路由到。它使用來自url的數據填充所有操作參數,並調用操作方法。
控制器上的操作方法現在負責「在網絡中心的蜘蛛」,它負責處理所有需要完成的服務以響應響應。這可能包括查詢模型中的數據,調用各種庫方法進行計算或幾乎其他任何事情。控制器方法的最後一步是確定應該返回什麼響應 - 在大多數基本情況下,響應應該是一個視圖,返回的代碼是return View();
。
視圖(或任何其他返回的結果)可能從控制器獲取一些數據,然後負責正確地呈現此數據。當視圖完成其工作時,框架將其返回給客戶端。
正如你所看到的,在什麼控制器動作應該被稱爲決定是要早得多(步驟1及2)比兩個什麼返回的結果應該是(步驟3月底)的決定,他們之間甚至不一定相互關聯。
要在您的應用程序中反映此情況,您希望爲控制器和視圖創建與可用控制器及其操作方法(至少可以返回ViewResult
)相對應的控制器和視圖的文件夾和文件結構,這個集合反映了你希望你的用戶使用這些控制器動作的URL。通過定義比默認路由更多的路由,您可以獲得各種各樣的url結構,根本不需要更改控制器/操作方法/視圖結構。
如果這一切似乎仍像的決定迷宮,它可能是適當的去http://www.asp.net/mvc/和觀看一些學習視頻或閱讀一些教程。這裏有一些關於框架如何工作的視頻和文本,以及它們如何使用。
在你的控制器動作,您可以返回從任何文件夾視圖,你想是這樣的:
return View("/Views/Members/Business/Index.aspx", model);
若有人在一個解決方案仍然感興趣,MVC有一個名爲「區域」,讓你的事定義子文件夾。
http://msdn.microsoft.com/en-us/library/ee461420%28v=VS.100%29.aspx
好的...所以路由定義決定使用哪個控制器? – dcolumbus 2010-12-21 22:47:51