具有默认ID的Asp.Net Mvc路由问题

时间:2012-09-24 07:33:54

标签: c# asp.net-mvc

我有一个Asp.Net Mvc网站,里面有一个列表控制器。路线看起来像这样:

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

非常标准。现在我的列表控制器中有许多控制器操作。我希望能够转到/ listing / 84并将其转到索引操作或/ listing / create,/ listing / edit,/ listing / favorite或/ listing / others,并让它转到相应的行动。对于我的大多数路线来说,情况已经如此。这是我的控制器代码:

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

我错过了什么吗?

2 个答案:

答案 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" }
);

答案 1 :(得分:0)

您可以为它创建两条新路线

用于列出/创建用于导航创建操作

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

传递Id时的索引操作

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

我希望,它会对你有帮助。