2011-03-22 81 views
0

美好的一天!如何在ASP.NET MVC中選擇生成外發URL的路由?

我使用ASP.NET MVC 2和T4MVC,似乎一些代碼神奇正在發生

當我加入這個路線表:

routes.MapRoute(
    "Login", 
    "login/", 
    MVC.Profile.Login() 
); 

如何框架知道,我想這治當我寫這樣的應用的視圖中的生成傳出網址:

<%: Url.Action(MVC.Profile.Login() %> 

如果我有多個不同的規則(具有不同的PARAMS)爲同一控制器/行動對?哪一個會被選中?有沒有對這種行爲有很好的描述?

在此先感謝!

回答

1

我會建議,以幫助您瞭解這項工作是如何分開T4MVC從MVC本身在封面下做的魔術。

當你寫這與T4MVC:

routes.MapRoute(
    "Login", 
    "login/", 
    MVC.Profile.Login() 
); 

這相當於直MVC寫這個:

routes.MapRoute(
    "Login", 
    "login/", 
    new { controller = "Profile", action = "Login" } 
); 

並在視圖:

Url.Action(MVC.Profile.Login()) 

是一樣的

Url.Action("Login", "Profile") 

T4MVC爲您提供了強類型/智能感知的好處,但最終它的功能與直MVC相同。

希望這有助於清理一下東西:)

+0

感謝您的快速響應。因此,如果我有兩個路由到同一個控制器,說 - 一個與分頁參數形式爲'/ view/page-2'和一個沒有'/ view /'我需要指定路由名稱來使用路由生成URL第二''Global.asax'。據我記得,在T4MVC中沒有強類型的幫助路由名稱? – artvolk 2011-03-23 07:20:16

+1

T4MVC沒有爲路由名稱提供強類型助手,這是正確的。但是隻要定義在路由聲明和視圖中使用的公共常量,就可以獲得強大的輸入。 – 2011-03-23 19:20:51

+0

您能否詳細解釋我如何才能讓強大的打字工作。我正在使用MvcContrib便攜式區域,無法使T4MVC正常工作,因爲視圖/控制器在路徑中沒有附加「Areas/MyArea」的情況下返回。 – 2011-05-24 03:47:11

1

它按照您定義的順序匹配路線模式。這就是爲什麼你有默認模式作爲最後一個。一旦找到匹配的模式,它就停止尋找。

編輯

的參數匹配的路由過程中會忽略。一旦選擇了控制器方法,mvc將使用模型綁定將參數分配給方法變量。

如果你可以解釋你正在尋找什麼類型的url結構,我們可以幫助你更多。

+0

什麼是匹配標準?只是控制器\動作或參數? – artvolk 2011-03-22 20:13:28

-1

您的示例是無效的MVC,您通常會傳遞控制器名稱,操作和任何其他參數,然後路由引擎將使用所有信息來確定使用哪條路徑,定義的路由越多,信息可能需要確定一個你想匹配

+0

該方法接受一個對象,所以技術上任何東西都是有效的。如果該MVC.Profile.Login()方法返回了一個具有控制器和操作屬性的類,它會正常工作,不是嗎? – mdm20 2011-03-22 20:43:24

+0

該調用確實非常正確,並且T4MVC調用的方式總是如此。 – 2011-03-22 23:40:25