我有一个 ASP.NET MVC 5 网站。
按照各种博客中的建议,我使用 T4MVC 更改我的路由:
context.MapRoute(
name:"MyArea_default",
url:"MyArea/{controller}/{action}/{id}",
defaults:new { action = "Index", id = UrlParameter.Optional }
);
...到...
context.MapRoute(
name: "MyArea_default",
url: "MyArea/{controller}/{action}",
defaults: MVC.MyArea.Orders.Index()
);
这“有效”,但我确实想知道从 URL 模式中删除 {id} 段。果然,URL 已更改为(例如):
/MyArea/Orders/Edit/1
...至:
/MyArea/Orders/Edit?id=1
我真的不喜欢查询字符串参数,所以我想使用以前的形式。
我尝试将 {id} 部分放回路由定义中:
context.MapRoute(
name: "MyArea_default",
url: "MyArea/{controller}/{action}/{id}",
defaults: MVC.MyArea.Orders.Index()
);
...但是默认值当然不再为 id
提供默认值,因此这不起作用。如果 Index
操作采用可选的 id
参数,那么我就可以执行以下操作:
context.MapRoute(
name: "MyArea_default",
url: "MyArea/{controller}/{action}/{id}",
defaults: MVC.MyArea.Orders.Index(null) // <- DEFAULT FOR ID
);
...但事实并非如此,所以我陷入了困境。
此外,我对现在在路由定义中指定特定 Controller 这一事实感到紧张。在 T4MVC 更改之前,路由未指定 Controller 。新样式现在是否意味着我需要每个 Controller 一个路由?
最佳答案
您应该将 T4MVC 视为打字辅助工具,以避免出现魔法值。除此之外,一切都以相同的方式工作,因此您不再比以前更依赖于特定的 Controller 。
要解决您的问题,请尝试:
defaults: MVC.MyArea.Orders.Index().AddRouteValue("id", UrlParameter.Optional)
关于asp.net-mvc - 如何让 T4MVC 使用像 "{controller}/{action}/{id}"这样的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21455312/