asp.net-mvc - 如何让 T4MVC 使用像 "{controller}/{action}/{id}"这样的路由?

标签 asp.net-mvc asp.net-mvc-routing t4mvc

我有一个 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/

相关文章:

c# - MVC 部分页面更新

asp.net - MVC 路由与现有文件夹冲突导致 404

asp.net-mvc - MVC - 带查询字符串的路由

jquery - 通过 Nuget 添加新版本的 Jquery 以及 t4mvc 的问题

c# - 无法使用 Ninject 将依赖项注入(inject)从 Angular 服务调用的 ASP.NET Web API Controller

c# - 使用来自 LINQ 的不同值创建动态选择列表

jquery - 如何在 jQuery 中从 MVC View Foreach 使用 OnClick 函数

c# - .NET MVC 自定义路由

asp.net-mvc - 创建带有URL片段的T4MVC ActionLink

asp.net-mvc - T4MVC 和 Html.BeginForm