0

无论如何,我可以减少 global.ascx 文件中多页面级别的重复 mapRoute 注册量,如下所示。

    routes.MapRoute("Article-level1",
                "{sluglevel1}/article/{id}/{article-title}",
                new { controller = "article", action = "detail", id = UrlParameter.Optional });


routes.MapRoute("Article-level2",
                "{sluglevel1}/{sluglevel2}/article/{id}/{article-title}",
                new { controller = "article", action = "detail", id = UrlParameter.Optional });

routes.MapRoute("Article-level3",
                "{sluglevel1}/{sluglevel2}/{sluglevel3}/article/{id}/{article-title}",
                new { controller = "article", action = "detail", id = UrlParameter.Optional });

... more levels 4 to 10 ...

如果有更好的方法,请告诉我。

4

2 回答 2

0

你可以做一个简单的循环动态生成你的路线:

int levelCount = 5;

for (int i = 1; i <= levelCount; i++)
{
    string routeName = "Article-level" + i;

    IEnumerable<string> levels = Enumerable.Range(1, i).Select(r => string.Format("{{sluglevel{0}}}", r));
    string url = string.Join("/", levels);
    url += "/article/{id}/{article-title}";

    routes.MapRoute(routeName, url,
        new { controller = "article", action = "detail", id = UrlParameter.Optional });
}

您将需要导入System.LinqSystem.Collections.Generic

using System.Linq;
using System.Collections.Generic;
于 2013-05-13T13:46:51.287 回答
0

您可以探索“Catch-all”路由参数:在 URL 模式中处理可变数量的段

但是您需要将路线的结构更改为如下所示:

"article/{id}/{article-title}/{*sluglevels}"

于 2013-05-13T10:01:00.503 回答