首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net mvc和路由

asp.net mvc和路由
EN

Stack Overflow用户
提问于 2012-01-24 21:30:32
回答 2查看 143关注 0票数 0

我在Controller中有以下操作

代码语言:javascript
复制
public ActionResult Index(int? pageNumber)
public ActionResult Details(string seoFriendlyName)

我想要有以下几条路线:

代码语言:javascript
复制
~/article/ -> Action = Index, pageNumber = 1
~/article/page-5 -> Action = Index, pageNumber = 5
~/article/page-1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo

我尝试定义以下路由,但它不起作用:

代码语言:javascript
复制
routes.MapRoute(
                null,
                "article/page-{pageNumber}",
                new { controller = "MyController", action = "Index", pageNumber = 1 },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article",
                new { controller = "MyController", action = "Index", },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article/{seoFriendlyName}",
                new { controller = "MyController", action = "Details", },
                new[] { "MyNamespace" }
);

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-24 21:35:52

你的要求是自相矛盾的。例如,如果您有一篇包含seoFriendlyName == "page-6“和实际pageNumber == 2的文章,应该选择哪条路由?

我建议您将您的需求更改为

代码语言:javascript
复制
~/article/ -> Action = Index, pageNumber = 1
~/article/page/5 -> Action = Index, pageNumber = 5
~/article/page/1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo

然后,您将拥有以下路由:

代码语言:javascript
复制
routes.MapRoute(
                null,
                "article/page/{pageNumber}",
                new { controller = "MyController", action = "Index", pageNumber = 1 },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article",
                new { controller = "MyController", action = "Index", },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article/{seoFriendlyName}",
                new { controller = "MyController", action = "Details", },
                new[] { "MyNamespace" }
);

更新

回应评论:

对于这个特定的需求,你需要这样修改你的路由:

代码语言:javascript
复制
routes.MapRoute(
                null,
                "article",
                new { controller = "MyController", action = "Index", pageNumber = 1 },
                new[] { "MyNamespace" }
);

routes.MapRoute(
                null,
                "article/page/{pageNumber}",
                new { controller = "MyController", action = "Index", },
                new[] { "MyNamespace" }
);


routes.MapRoute(
                null,
                "article/{seoFriendlyName}",
                new { controller = "MyController", action = "Details", },
                new[] { "MyNamespace" }
);
票数 2
EN

Stack Overflow用户

发布于 2012-01-24 21:45:03

你还没告诉我们,到底是什么出了问题。我看到的唯一一件事是,您为pageNumber参数设置了错误的值。

这应该能更好地工作:

代码语言:javascript
复制
routes.MapRoute(
    null,
    "article",
    new { controller = "MyController", action = "Index", pageNumber = 1 },
    new[] { "MyNamespace" }
);

routes.MapRoute(
    null,
    "article/page-{pageNumber}",
    new { controller = "MyController", action = "Index"},
    new[] { "MyNamespace" }
);

routes.MapRoute(
    null,
    "article/{seoFriendlyName}",
    new { controller = "MyController", action = "Details" },
    new[] { "MyNamespace" }
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8987638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档