【发布时间】:2020-03-27 07:15:41
【问题描述】:
使用 MVC 5,我试图让一些友好的控制器/动作名称通过路由工作。用这个把我的头撞到墙上。
给定这个控制器:
MyController
Index(startPage, pageSize)
EditAction(itemId)
我正在使用两个路由(在继承的 AreaRegistration 类下定义)
context.MapRoute(
"MyControllerRoute",
"myArea/MyController/{action}/{itemId}",
new
{
controller = "MyController",
action = "Index",
itemId = UrlParameter.Optional
},
new[] {"MySite.Areas.MyArea.Controllers"});
context.MapRoute(
"MyControllerRoutePaged",
"myArea/MyController/{action}/{startPage}/{pageSize}",
new
{
controller = "MyController",
action = "Index",
pageSize = UrlParameter.Optional,
startPage = UrlParameter.Optional
},
new[] {"MySite.Areas.MyArea.Controllers"});
我想实现这些链接:
mysite.com/MyArea/MyController/startPage/pageSize
mysite.com/MyArea/MyController/EditAction/itemId
mysite.com/MyArea/MyController2/ (this being the Index action for a given controller)
mysite.com/MyArea/MyController3/ (this being the Index action for another controller)
mysite.com/MyArea/MyController/ (mysite.com/MyArea/MyController/0/20 would also work if paging existis on the controller)
mysite.com/MyArea/MyController/5/20
mysite.com/MyArea/MyController/EditAction/5
分页链接显示在默认索引页面上。不在任何“操作页面”上。特别是我希望隐藏索引操作名称,所以我最终不会得到如下链接:
mysite.com/MyArea/MyController/MyController/.../
如果我将 {action} 占位符放在路由中,我可以实现这一点,但路由最终会发生冲突。我曾尝试使用 ActionLink 和 RouteLink(定义路线名称),但总是有一条路线首先匹配并中断下一条路线。如果我更改路线的顺序,这仍然会发生,但反过来。
我正在使用路由调试器,我可以看到哪里出了问题,但我一直在绕圈子试图让它工作。
有什么想法吗?谢谢。
【问题讨论】:
标签: .net asp.net-mvc asp.net-mvc-5