2011-05-10 45 views
4

在大多數文章中,他們都提供了這些代碼並對其進行解釋,但我覺得我沒有得到它。請問任何機構都可以用簡單的術語來表達它。Routing-MVC-ASP.NET

這個問題看起來很簡單,但我不能在我的腦海中得到它正確。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

     ); 

我的問題:

爲何要用route.IgnoreRoute以及爲什麼參數{}?

Maproute有第一個參數 - 默認,類似於第二個參數 - 「{controller}/{action}/{id}」,這個和第三個參數是什麼,我們使用new?

我如何解釋這些路由?

爲什麼所有這些?

我已經使用webforms到目前爲止,無法得到它?

MVC中的任何大師都能解釋所有這些嗎?

回答

5

爲什麼我們使用route.IgnoreRoute

這告訴路由忽略匹配提供模式的任何請求。在這種情況下忽略對axd資源的任何請求。

以及爲什麼{}中的參數?

{}表示分隔字符串是一個變量。在忽略路由中,這是用來匹配任何.axd請求的。

圖路線有第一個參數,默認情況下,類似於什麼,

第一個參數是路由名。當通過名稱引用路由時可以使用這個。它可以是我傾向於使用的null

第二個參數 - 「{控制器}/{行動}/{ID}」,爲

這什麼這是匹配的模式。在這種情況下,它將設置默認路由,這是由控制器名稱,操作名稱和可選ID形成的url。 url http://mysite.com/Foo/Bar將調用Foo控制器上的Bar方法。將url更改爲http://mysite.com/Foo/Bar/1將傳遞一個參數,標識符爲id,值爲1

和第三參數,

第三個參數供給的缺省值。在默認路由的情況下,默認控制器名稱是Home,默認操作是Index。這樣做的結果是,對http://mysite.com的請求將調用Home控制器上的Index方法。該路線的id部分被指定爲可選。

我們用新的?

new關鍵字使用.Net框架的第3版中引入的對象初始值設定項語法創建對象。 Microsoft article

使用路由的主要優點是,它爲你的URL的約定。如果您創建了名爲Account的新控制器以及稱爲IndexReview的操作方法,則這些方法分別在/AccountAccount/Review處可用。

0

首先:ASP.NET MVC不是webforms的簡單版本。

MVC有一個特殊的結構。您可以在此處找到MVC說明:http://en.wikipedia.org/wiki/Model-View-Controller

MapRoute添加了URL結構映射。例如,按照www.domain.com/home/users/1這樣的默認路由鏈接,意味着服務器應該在名爲home的控制器中調用users操作。該操作獲取一個名爲id的參數,其值爲1

如果要添加新的路線,你可以簡單地添加這個微博賬號下一個方法:

routes.MapRoute(
    "NewRoad", // Route name 
    "/photos/{username}/{action}/{id}", // URL with parameters 
    new { controller = "Photos", action = "Index", string username, id = UrlParameter.Optional } // Parameter defaults 

); 

下面這條道路將URL:domain.com/photos/someuser/view/123。我們可以映射可選參數,如id和靜態參數,如用戶名。默認情況下,我們稱之爲照片控制器和索引操作(如果操作未在ult中設置,服務器將調用默認操作「索引」,我們將其設置在路徑中)。

+0

不能使用這種對象的聲明'新的{控制器=「照片」,行動=「指數」,'** **字符串'用戶名,ID = UrlParameter.Optional}'因爲對象初始化內部**不能被指定爲任何數據類型**,而只能由編譯器推斷。 – 2017-04-23 19:52:25