2012-07-12 57 views
1

我已經通過了一些關於Asp.net MVC和目錄結構這些問題閱讀,但我還是不明白怎麼immitate正規網址目錄,例如www.mysite.com /書籍/冒險/英國Asp.net MVC URL和目錄結構

而且,當你想到的標準網站頁面像首頁,關於,聯繫我們等你不會希望爲每一個控制器,但你也不想的網址看起來像這樣: www.mysite.com/home/about 你會最好希望它是www.mysite.com/about

任何有圖路線對象的好足夠的瞭解,以幫助我理解這?

感謝, 雅克

回答

1

這是global.asax.cs

默認情況下完全可定製的,一個新的MVC項目增加了下面的約定標準的「包羅萬象」路線:www.mysite.com/Controller/Action/ID

如果你想不同的東西,比如你www.mysite.com/about路由的例子HomeController.About()動作,你會之前添加以下路由的包羅萬象的一個:

routes.MapRoute(
    "My About Route", 
    "About", 
    new { controller = "Home", action = "About" } 
); 

您可以添加任何數量的不遵循MVC catchall約定的自定義路由,甚至可以根據需要完全替換catchall路由。


編輯:

要回答下面的評論,沒有你不一定需要添加一個路由,一切可能的行動,而不是可以讓適合的URL的一個模式的單一路線 - 只就像人們正在做的那樣。 {controller}{action}是特殊關鍵字。

例子:

1)程序有一個SetController,但用戶都習慣叫它們批次:

routes.MapRoute(
    "Batch", 
    "Batch/{action}/{id}", 
    new { controller = "Set", action = "Index", id = UrlParameter.Optional } 
); 

2)你喜歡按對象類型的控制器,但有鏈接的是一個動詞/名詞格式:

  • FlightController
  • HotelController
  • /發現/航班/電子書/飛行
  • /發現/酒店/儲備/酒店/希爾頓

routes.MapRoute(
    "NewCatchall", 
    "{action}/{controller}/{name}", 
    new { controller = "Home", action = "Index", name = UrlParameter.Optional } 
); 

第二個例子可以完全取代默認路由,以及所有可能的網址將適合其格式。所以沒有什麼會繼續檢查任何其他路線。瞭解路由是按順序檢查很重要,並且使用了與請求匹配的第一個模式 - 其餘的忽略。

+0

感謝arserbin3:

這些學習的時候對我很有益的。所以你說的是,對於這些普通頁面中的任何一個,你都必須在全局asax文件中創建路由。我想我只是習慣於在CMS環境中工作,每次都必須這樣做似乎有點矯枉過正。從MVC的角度來看,它確實有意義。再次感謝 – Jacques 2012-07-13 07:21:56

+0

如何更詳細的目錄結構,如www.mysite.com/services/electrical/contractors ...? – Jacques 2012-07-13 07:26:17