2012-09-24 170 views
1

我有一個Asp.Net Mvc網站有一個列表控制器。路線如下:Asp.Net Mvc路由問題與默認Id

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "MySite.Web.Controllers" } 
); 

非常標準。現在我的列表控制器中有許多控制器操作。我希望能夠進入/列出/ 84並將其轉到索引行動或/列出/創建,/列出/編輯,/列出/最愛或/列出/其他,並讓它去到相應的操作。對於我的大部分路線來說,情況已經如此。這是我的控制器代碼:

public ActionResult Index(long? id) 
{ 
    // my code that never gets hit 
} 

我錯過了什麼嗎?

+0

我編輯的問題,告知大家的是,我在控制多個動作。 –

回答

3

你可以定義此爲ID的具體路線和約束:

routes.MapRoute(
    "ActionLess", 
    "{controller}/{id}", 
    new { controller = "Home", action = "Index" }, 
    new { id = @"^[0-9]+$" }, 
    new string[] { "MySite.Web.Controllers" } 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "MySite.Web.Controllers" } 
); 
+0

非常感謝你。確實是優雅的解 –

0

您可以創建兩個新的路徑爲它

對於lisitng /合格標識

routes.MapRoute(
    "lisingid", // Route name 
    "listing/{Id}", // URL with parameters 
     new { controller = "listing", action = "Index", id = UrlParameter.Optional } 
); 

我希望當創建用於導航創建行動

routes.MapRoute(
    "listingCreate", // Route name 
    "listing/Create", // URL with parameters 
     new { controller = "listing", action = "Create" } 
); 

對於指數的行動,這將有助於您。

+0

做到這一點的一種方法。我不認爲這是一個不好的解決方案,但如果我有20個不同的行爲,那麼我將不得不做20種不同的方法。 –