【发布时间】:2013-01-13 20:00:41
【问题描述】:
我有一个 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 路由,而不是 Default,生成指向 index-action 的 URL。
我当然可以强制一个合适的锚做这样的事情:
@Html.RouteLink(
"All applications",
"Default",
new { controller = "Application", action = "Index"})
但这感觉就像我正在治愈症状而不是实际问题。我也失去了对所有锚点进行编译时检查的美感,所以我宁愿做其他事情。
有没有办法强制 T4MVC 在视图中生成锚点时忽略当前页面的参数?或者我可以以某种方式修改我的路线以避免这种行为吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc routes t4mvc