我有一个 ASP.Net MVC4 应用程序,我在其中使用 T4MVC 在我的 View 中方便地生成 anchor 元素。像这样:
@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" }
);
我有一个应用程序 Controller ,其中一些操作需要特定应用程序的 ID,而其他操作不需要 Id,因为它们不是特定于应用程序的(例如显示所有应用程序的页面)。
路由在大多数情况下运行良好,生成如下链接:
/application/index <-- Overview of all applications
/application/1/overview <-- Overview of specific application
当我在 /application/1/overview
上并尝试创建一个返回到索引操作的 anchor 元素时,问题就出现了。生成的链接然后以 /application/1/index
结尾,这不是我们想要的行为。
如果我错了请纠正我,但我相信这里发生的事情是 T4MVC 识别出当前页面的路由中有一个可用的应用程序 ID 并使用该 ID,以便它可以利用DefaultWithId
路由,而不是 Default
,用于生成指向索引操作的 URL。
我当然可以强制一个合适的 anchor 做这样的事情:
@Html.RouteLink(
"All applications",
"Default",
new { controller = "Application", action = "Index"})
但这感觉就像是在治标不治本。我还失去了对所有 anchor 进行编译时检查的好处,所以我宁愿做其他事情。
在 View 中生成 anchor 时,是否有办法强制 T4MVC 忽略当前页面的参数?或者我可以通过某种方式修改我的路线以避免这种行为吗?
最佳答案
“T4MVC 识别出当前页面的路由中有可用的应用程序 ID 并使用该 ID,以便它可以使用 DefaultWithId 路由而不是 Default 来生成指向索引的 URL - Action ”
T4MVC 没有这样的智能,而是内置在 MVC 路由系统中。但许多 T4MVC 用户以前遇到过这种情况。各种引用:
关于c# - 在 View 中生成新 anchor 时,我可以强制 T4MVC 不要从当前 View 的 URL 中获取参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307556/