我有一个 ASP.Net MVC4 应用程序,我使用 T4MVC 在我的视图中方便地生成锚元素。像这样的东西:
@Html.ActionLink("Application 1", MVC.Application.Overview(1))
我的 RouteConfig 中有两条路线:
routes.MapRouteLowercase(
name: "DefaultWithId",
url: "{controller}/{id}/{action}/{subaction}",
constraints: new { id = @"\d+" },
defaults: new { subaction = UrlParameter.Optional }
);
routes.MapRouteLowercase(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
我有一个应用程序控制器,其中某些操作需要某个应用程序的 Id,而其他操作不需要 Id,因为它们不是特定于应用程序的(例如显示所有应用程序的页面)。
这些路线在大多数情况下运行良好,生成如下链接:
/application/index <-- Overview of all applications
/application/1/overview <-- Overview of specific application
当我打开/application/1/overview
并尝试将锚元素创建回索引操作时,就会出现问题。然后生成的链接结束/application/1/index
,这不是所需的行为。
如果我错了,请纠正我,但我相信这里发生的是 T4MVC 识别出当前页面的路由中有一个可用的应用程序 ID 并使用该 ID,以便它可以利用该DefaultWithId
路由,而不是of Default
, 生成索引操作的 URL。
我当然可以强制一个合适的锚做这样的事情:
@Html.RouteLink(
"All applications",
"Default",
new { controller = "Application", action = "Index"})
但这感觉就像我正在治愈症状而不是实际问题。我也失去了对所有锚点进行编译时检查的美感,所以我宁愿做其他事情。
在视图中生成锚点时,有没有办法强制 T4MVC 忽略当前页面的参数?或者我可以以某种方式修改我的路线以避免这种行为吗?