路由问题 - 在变量中

时间:2010-08-24 20:32:40

标签: asp.net-mvc-2 routing

我在我的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,且名称为“test media list”,则问题在于我用 - 替换空格“”,这会破坏我的路线。

我无法弄清楚如何制作这个“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

2 个答案:

答案 0 :(得分:1)

我认为更优雅,更简单的解决方案是www.example.com/Media/1/test-media-list

如果您坚持使用您的网址示例,请执行以下路线:

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

并使用this blog post中描述的技术将slug中的id,name或任何内容解析为动作参数。

答案 1 :(得分:0)

我使用在http://iridescence.no/post/Defining-Routes-using-Regular-Expressions-in-ASPNET-MVC.aspx

找到的正则表达式路线完成此操作
routes.Add(
    new RegexRoute(@"^Media\/(?<mediaId>\d+)-(?<mediaName>[^\/]*)$", 
        new MvcRouteHandler())
    {
        Defaults = new RouteValueDictionary(new { 
        controller = "Media", action = "Display", playlistName = "" })
    }