1

我有一个带有列表控制器的 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 并将其转到 Index 操作或转到 /listing/create、/listing/edit、/listing/favorite 或 /listing/others 并将其转到相应的动作。对于我的大多数路线,情况已经如此。这是我的控制器代码:

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

我错过了什么吗?

4

2 回答 2

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" }
);
于 2012-09-24T07:46:50.957 回答
0

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

用于 lisitng/Create 用于导航 Create Action

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 } 
);

我希望,它会帮助你。

于 2012-09-24T07:43:03.307 回答