Asp.net mvc 为MVC组合ASP.Net路由中的值

Asp.net mvc 为MVC组合ASP.Net路由中的值,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,有人能提出一种方法来在ASP.Net路由(MVC3)中完成以下任务吗 我希望URL中确定控制器的值实际上是页面id的一部分: /{id}-{controller}/{action}/{further-values} 但是我需要id值来包括控制器所用的值,因此在上面,如果我们有以下URL: /chelsea-football-team/view/2010-2011 我希望{id}值最好是“切尔西足球队”,控制器是“足球队”,动作是“视图”,附加值是“2010-2011” 如果有几个路由的控制器

有人能提出一种方法来在ASP.Net路由(MVC3)中完成以下任务吗

我希望URL中确定控制器的值实际上是页面id的一部分:

/{id}-{controller}/{action}/{further-values}
但是我需要id值来包括控制器所用的值,因此在上面,如果我们有以下URL:

/chelsea-football-team/view/2010-2011

我希望{id}值最好是“切尔西足球队”,控制器是“足球队”,动作是“视图”,附加值是“2010-2011”

如果有几个路由的控制器值硬编码到路由定义中,我没有问题,但是我需要能够有几个控制器值

我知道我可以简单地组合控制器中的值,但这会增加很多额外的、重复的代码——那么这是否可以通过其他方式实现呢


我为什么要这样做?因为我需要完整的球队名称,但球队名称的一部分将始终与控制员名称匹配,所以为什么不在路线中合并它们?

我希望{id}值理想情况下为“切尔西足球队”,控制员为“足球队”,动作为“视图”,附加值为“2010-2011”

评论1后更新

不能使用标准路由实现在URL中组合路由参数,使单个参数同时表示变量(id)和控制器。如果您希望id为“chelsea football team”,则必须是一个独立的路线参数。您不能以MVC从id中提取控制器名称的方式组合它

要满足此要求,您可能必须创建自定义RouteBase实现:

public class MyCustomRoutingPattern : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        // do your coding and return an instance of RouteData
    }
}
然后您可以这样使用它:

routes.Add(new MyCustomRoutingPattern(
    "{id}/{action}/{*furtherValues}"));

然后,RouteBase实现可以从id参数中提取控制器。Steve Sanderson和Adam Freeman撰写的Pro ASP.NET MVC3框架书中有一节介绍了如何重写RouteBase类

{further values}
不应该是
{*further values}
?因为你不能在你的动作方法中创建一个连字符的参数?它只是Im所追求的东西的一个通用表示,而不是实际工作的代码。不,因为当我需要定义或提示url中使用的控制器时,这将我限制为一个控制器。谢谢你的回答,tho:)
routes.Add(new MyCustomRoutingPattern(
    "{id}/{action}/{*furtherValues}"));