2012-08-12 136 views
1

我新的ASP.NET MVC,在過去的一年裏Web窗體背景快到了,我已經開始與MVC 3個工作日前與有似乎沒有問題很好的答案(我現在找不到),並想在這裏發佈。任何幫助,將不勝感激。我的問題只關注控制器,控制器操作,視圖和global.asax。查看/控制器動作/路由/ Gobal.asax

  1. 我瞭解與控制器內的視圖,控制器和操作的關係。當涉及到創建視圖時,與創建的視圖相關的每個動作是否都必須在global.asax中註冊?示例:創建空項目時,global.asax已經爲Home控制器創建了一個默認路由,其索引操作和id是可選的。所以,如果我基於Home控制器創建另一個名爲「AboutUs」的視圖,我是否需要在global.asax中註冊該視圖作爲Home控制器的一部分?

  2. 是否有一對一的關係在控制器/動作和登記方面在Global.asax用於路線?可以將多個控制器操作添加到以逗號分隔的相同語句中(如使用global.asax中的示例Home控制器,然後將另一個操作添加到同一個語句或者是否需要在是什麼?

  3. 是否有一個「最佳實踐」標準創建控制器/視圖/路由時使用?

我問這些問題,因爲我在轉換Web表單網站MVC 3和沒有找到很多我的問題的好答案。期待任何和所有的迴應。

回答

0
  1. 不,你並不需要註冊的每個查看您在Global.asax中創建。你按照慣例(你或一個你自己定義的,你應該走這條路被定義即路由)的路由只要會照顧那個

  2. 不再。當您在控制器中創建新的Action時,通常需要爲該操作創建一個視圖來呈現其打算執行的操作(ajax/json操作可以作爲此規則的例外)。但是,你不需要在Global.asax中註冊任何東西。只要遵循該全局文件中定義的路由約定。

  3. 我會說它帶有MVC的經驗。一般來說,每個問題都有自己的解決方案,所以它的任務就在眼前,而不是一般的方法。但是,您可以從MVC 3:I.E.的默認值開始。重新定義路由和多個控制器,每個控制器都有多個操作再次遵循約定。

希望這會有所幫助。

1

Sco關於MVC路由如何在他的博客上工作,谷歌有一個great post,你應該檢查它!

在每個路由的Global.asax中都有一個匹配的模式,但不一定是明確的匹配。對於你的例子,如果你有一個名爲「關於我們」,如果你有一個控制器動作命名,它只會工作,由於該模式匹配的觀點:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

行:"{controller}/{action}/{id}"是被匹配的模式通過路由引擎。它說任何與上面匹配的URL路徑都會被髮送到正確的視圖。對於你的例子,如果你要按照網址:Home/AboutUs那麼它會帶你到家庭控制器,關於我們查看,沒有參數。

關於你的第二個問題,被選中的控制器也是模式的一部分。如果您添加了第二個控制器(名爲Contact),然後添加了一個名爲電子郵件的操作,則此URL仍將遵循相同的模式:Contact/Email,因此您不需要添加額外的路由。

以下是關於MVC路由是如何工作的其他一些偉大的博客文章,這將指向你在正確的方向。其中關於Asp.Neta blog post,並在MSDN