Chr*_*ris 8 c# asp.net-mvc asp.net-mvc-routing maproute razor
我正在尝试创建一些自定义地图路线,但无法使其正常工作.
我的最终目标是能够指定类似下面的内容.我基本上用URL构造了"id"和"name"的值对.这个名字是无关紧要的,仅供用户恳求,我会在我的控制器中要求ID.
/仪表板/ 5-MY-村名/ 89-MY-群名/ 133-也许偶数另一个子群
对于初学者,我正在研究第一部分并遇到麻烦.
使用以下路由浏览"http:// localhost:53933/dashboards/109-building-xyz"会生成错误 A public action method '109-building-xyz' was not found on controller 'MyInterfaceInterface.Controllers.DashboardsController'.
routes.MapRoute(
"Dashboard",
"dashboards/{id}-{name}", // URL pattern
new { controller = "Dashboards", action = "Index" },
new { id = @"\d+", name = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
显然我希望通过参数将其路由到Index函数.
我究竟做错了什么?我甚至正确地构建了这个吗?我来自web-PHP背景并使用htaccess来实现这些功能.
谢谢
路线的顺序很重要.MVC将使用与URL模式匹配的模式匹配第一个声明的路由.
所以,如果你有这个:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}", // URL pattern
new { controller = "Home", action = "Index" },
new { id = UrlParameter.Optional }
);
routes.MapRoute(
"Dashboard",
"dashboards/{id}-{name}", // URL pattern
new { controller = "Dashboards", action = "Index" },
new { id = @"\d+", name = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
然后,URL会发生什么http://localhost:53933/dashboards/109-building-xyz,MVC将"仪表板"与控制器匹配,"109-building-xyz"与动作相匹配.
您需要始终先声明最具体的路线,然后再使用更常规的路线,如下所示:
routes.MapRoute(
"Dashboard",
"dashboards/{id}-{name}", // URL pattern
new { controller = "Dashboards", action = "Index" },
new { id = @"\d+", name = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}", // URL pattern
new { controller = "Home", action = "Index" },
new { id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
但是,Morten Mertner在他的评论中是正确的 - 我认为你不能有2个路线参数没有被正斜杠分开.您需要将URL模式更改为此类型,以便将其与默认路由引擎一起使用:
"dashboards/{id}/{name}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16341 次 |
| 最近记录: |