2012-01-24 211 views
0

我在控制器asp.net MVC和路由

​​

以下動作和我想有以下途徑:

~/article/ -> Action = Index, pageNumber = 1 
~/article/page-5 -> Action = Index, pageNumber = 5 
~/article/page-1 -> ~/article/ 
~/article/foo -> Action = Details, seoFriendlyName = foo 

我試圖定義以下路線,但它不起作用:

routes.MapRoute(
       null, 
       "article/page-{pageNumber}", 
       new { controller = "MyController", action = "Index", pageNumber = 1 }, 
       new[] { "MyNamespace" } 
); 

routes.MapRoute(
       null, 
       "article", 
       new { controller = "MyController", action = "Index", }, 
       new[] { "MyNamespace" } 
); 

routes.MapRoute(
       null, 
       "article/{seoFriendlyName}", 
       new { controller = "MyController", action = "Details", }, 
       new[] { "MyNamespace" } 
); 

任何幫助將不勝感激!

回答

2

您的要求是自相矛盾的。例如,如果您有seoFriendlyName ==「page-6」和實際的pageNumber == 2的文章,應該選擇什麼路線?

我建議你改變你的要求

~/article/ -> Action = Index, pageNumber = 1 
~/article/page/5 -> Action = Index, pageNumber = 5 
~/article/page/1 -> ~/article/ 
~/article/foo -> Action = Details, seoFriendlyName = foo 

,然後你將有以下途徑:

routes.MapRoute(
       null, 
       "article/page/{pageNumber}", 
       new { controller = "MyController", action = "Index", pageNumber = 1 }, 
       new[] { "MyNamespace" } 
); 

routes.MapRoute(
       null, 
       "article", 
       new { controller = "MyController", action = "Index", }, 
       new[] { "MyNamespace" } 
); 

routes.MapRoute(
       null, 
       "article/{seoFriendlyName}", 
       new { controller = "MyController", action = "Details", }, 
       new[] { "MyNamespace" } 
); 

UPDATE

在迴應評論:

針對該特定要求你需要修改你的路線:

routes.MapRoute(
       null, 
       "article", 
       new { controller = "MyController", action = "Index", pageNumber = 1 }, 
       new[] { "MyNamespace" } 
); 

routes.MapRoute(
       null, 
       "article/page/{pageNumber}", 
       new { controller = "MyController", action = "Index", }, 
       new[] { "MyNamespace" } 
); 


routes.MapRoute(
       null, 
       "article/{seoFriendlyName}", 
       new { controller = "MyController", action = "Details", }, 
       new[] { "MyNamespace" } 
); 
+0

如果我稱之爲'Url.Action( 「指數」, 「myController的」)''然後〜/條/ page'將被渲染,而不是'〜/ article' –

+0

如果您希望這是'〜/ article',那麼您需要更改路線順序。另外,正如Jan建議的那樣,您應該將您的默認pageNumer設置移動到另一條路線。我馬上更新我的答案。 –

+0

已更新答案 –

0

你沒有告訴我們,什麼是不工作。 我唯一看到的是,你設置了錯誤的值到你的pageNumber參數。

這應該更好地工作:

routes.MapRoute(
    null, 
    "article", 
    new { controller = "MyController", action = "Index", pageNumber = 1 }, 
    new[] { "MyNamespace" } 
); 

routes.MapRoute(
    null, 
    "article/page-{pageNumber}", 
    new { controller = "MyController", action = "Index"}, 
    new[] { "MyNamespace" } 
); 

routes.MapRoute(
    null, 
    "article/{seoFriendlyName}", 
    new { controller = "MyController", action = "Details" }, 
    new[] { "MyNamespace" } 
); 
+0

在你的示例中,如果我調用'〜/ article/page- 1',我希望它被渲染爲'〜/ article' –

+0

是的,改變第一個路由的順序。 – Jan