2012-05-09 119 views
0

我在Global.asax的兩個路由器不能正常工作,一個是默認的路由器是這樣的:MVC路由時,默認和自定義路線是指同一個控制器

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", 
       new { controller = "Test", action = "Action1", id = UrlParameter.Optional } 
      ); 

等是定製路由器:

routes.MapRoute(
     "CustomRouter", // Route name 
     "Test/{id}/{FacetString}/{CurrPageNo}", 
     new { controller = "Test", action = "Action12", id = "", FacetString = UrlParameter.Optional, CurrPageNo=UrlParameter.Optional }   

);

一些如何當我通過URL「http:// localhost /測試/ 1001 /狀態= TX」第二個路由器應該得到執行,但一些如何它不執行。 我讀過路由器的序列是重要的,因此我試圖交換那裏的序列,但它仍然不工作,如果我把它放在默認路由器之上,那麼cutom路由器就會被調用路由器中的所有其他動作,這不應該發生

回答

0

根據你的第二個路徑您的網址應該在這些格式

http://localhost/Test/1001 

http://localhost/Test/1001/State 

http://localhost/Test/1001/State/3 

一個也沒有必要的controller = "Test", action = "Action12",因爲它們不是第二路由定義

有一部分看看這個MSDN link on ASP.NET routing

+0

我必須更改ie的名稱而不是測試我必須編寫測試,因此我的自定義路由看起來像routes.MapRoute( 「CustomRouter」,//路由名稱 「測試/ {id}/{FacetString}/{CurrPageNo}「, new {controller =」Test「,action =」Action12「,id =」「,FacetString = UrlParameter.Optional,CurrPageNo = UrlParameter.Optional} – daisy

0

最後一個URL組件State=TX看起來像一個查詢字符串參數給我。它不應該是?State=TX(然後將不匹配您的路線)或/State/TX

0

好像你應該使用約束,減少匹配率爲您定製的路由器。您可以使用第四個參數來定義您的約束。在這種情況下,它可以是這樣的

routes.MapRoute(
    "CustomRouter", // Route name 
    "Test/{id}/{FacetString}/{CurrPageNo}", 
    new { controller = "Test", action = "Action12", id = "", FacetString = UrlParameter.Optional, CurrPageNo=UrlParameter.Optional 
, new {[email protected]"\d+"}); 

這樣你的第二個網址部分需要爲數字才能執行。