2011-08-26 35 views
0

我在Global.asax.cs中配置的路由是這樣的:問題的給予id來動作

routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show" }); 

,這是所使用的控制器的動作與預覽:

public partial class PostController : Controller 
{ 
    public ActionResult Show(int PostId) 
    { 
     ... 
    } 
} 

的問題是,它選擇顯示()動作以使用,但它沒有給出int值,爲此它給null.Here是我用URL的一個示例:../郵政/顯示/ 0

編輯: 如果我在配置路線是這樣的:

 routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" }); 
     routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" }); 

一切正常,但是當我將其配置是這樣的:

 routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" }); 
     routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" }); 

第二航線「郵報」的失敗。 爲什麼?!

+0

順序應該永遠是特殊到一般。 'Post/Show/1232123'將始終與'{controller}/{action}/{page}'匹配完全相同的模式。你可以始終把路線本身路由約束從匹配剔除不必要的路線,但沒有理由(根據您以上途徑),你甚至需要交換他們。 – Buildstarted

+0

根據您的時間線路線。該路線基本上將作爲您的默認路線。那是你要的嗎?任何對「http:// site.com /'的請求都將與您的時間軸路線相匹配。 – Buildstarted

+0

不,我不希望這樣,我已經設置defoult路線: routes.MapRoute( 「家」, 「」,新{控制器= 「家」,行動= 「索引」}); – kr85

回答

2

你應該嘗試:

routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show", PostId = UrlParameter.Optional }); 
+0

嘗試過,但不起作用。 THX的幫助反正 – kr85

+0

巴比說,順序很重要,我suggusted路線必須是默認路由之前。你也可以使用默認的路由,而不是一個自定義的,可以替代由ID的所有帖子ID,它應該直接映射到默認的這條路上面MVC路線 –

+0

我有工作,因爲它應該(就像在問題的路線應該另一條路線,用id)。這是路線:routes.MapRoute( 「時間軸」, 「{控制器}/{行動}/{頁}」,新的{控制器= 「時間軸」,動作= 「列表」}); – kr85

1

這應該只是記住路線出現在Global.asax的順序也很重要。

routes.MapRoute(
       "Post", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Post", action = "Show", id = UrlParameter.Optional } // Parameter defaults 
      )