我有一个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
);
......但事实并非如此,所以我被困住了。
另外,我很担心现在在路由定义中指定了特定的控制器。在T4MVC更改之前,路由未指定控制器。新风格现在是否意味着我需要一个每个控制器的路由?
答案 0 :(得分:3)
你应该只看T4MVC作为打字辅助工具以避免神奇的价值。除此之外,一切都以同样的方式运作,因此您不再需要与特定控制器相关联。
要解决您的问题,请尝试:
defaults: MVC.MyArea.Orders.Index().AddRouteValue("id", UrlParameter.Optional)