Asp.net mvc 2 带-in变量的路由问题

Asp.net mvc 2 带-in变量的路由问题,asp.net-mvc-2,routing,Asp.net Mvc 2,Routing,我的asp.net mvc 2站点中有一条路径,如下所示 routes.MapRoute( "media_display", "Media/{mediaId}-{mediaName}", new { controller = "Media", action = "Display" }, new { mediaId = @"\d+" } ); 其

我的asp.net mvc 2站点中有一条路径,如下所示

routes.MapRoute(
                "media_display",
                "Media/{mediaId}-{mediaName}",
                new { controller = "Media", action = "Display" },
                new { mediaId = @"\d+" }
            );
其中mediaId是媒体的id,mediaName是媒体的标题。 一个例子

www.example.com/Media/1-test-Media-list

当id为1,名称为“测试媒体列表”时,这里的问题是我将空格“”替换为-,这会破坏我的路由

我只是不知道如何使“mediaName”可以包含一个-

我也有下面的规则,但解决方案应该是相同的

routes.MapRoute(
                "media_display",
                "Media/{mediaId}-{mediaName}/edit",
                new { controller = "Media", action = "Edit" },
                new { mediaId = @"\d+" }
            );
也有可能做一个路线,将赶上所有以下3个例子,现在我只是有3个不同的路线,但我想减少这一点

www.example.com/Media/1-test-Media-list

www.example.com/Media/1-

www.example.com/Media/1


我已经用我在

routes.Add(
新的RegexRoute(@“^Media\/(?\d+)-(?[^\/]*)$”,
新的MvcRouteHandler())
{
默认值=新建RouteValueDictionary(新建{
控制器=“媒体”,操作=“显示”,播放名称=“”})
}

我认为有一个更优雅、更简单的解决方案:<代码> www.示例.com /Media/ 1 /测试媒体列表

如果您坚持使用您的url示例,请创建如下路线:

routes.MapRoute(
                "media_display",
                "Media/{slug}",
                new { controller = "Media", action = "Display" },
            );

并使用中描述的技术将slug中的id、名称或任何您需要的内容解析到您的操作参数中。

我想说www.example.com/Media/1-test-Media-list是最优雅的:D slug-sulotion将打破我使用Html的URL制作。action(“Display”,“Media”,new{mediaId=1,mediaName=“Some name”});但如果没有人能帮我处理{mediaId}-{mediaName}问题,我会使用{mediaId}/{mediaName}吗?我以前有一个属性,当我使用它时,它会在我的视图模型中返回生成的slug。然后你会有Html.Action(“Display”,“Media”,new{slug=model.MediaSlug})。但我仍然认为/id/name更好。看!即使这样使用它;)我使用了/id/name解决方案
routes.MapRoute(
                "media_display",
                "Media/{slug}",
                new { controller = "Media", action = "Display" },
            );