c# - 在 View 中生成新 anchor 时,我可以强制 T4MVC 不要从当前 View 的 URL 中获取参数吗?

标签 c# asp.net asp.net-mvc routes t4mvc

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

相关文章:

c# - 添加“阅读更多”按钮以查看 Gridview 描述文本

c# - 跳跃高度与空格键时间的关系

c# - 将 sql 层次结构读入 C# 对象

c# - 使用 CaSTLe 日志记录工具将 CaSTLe Windsor 版本 4.0.0 与 NLog 结合起来

c# - 背景属性不指向路径 '(0).(1)' 中的依赖对象

asp.net - 什么是最好的 - 数据集或数据阅读器?

asp.net - 如何在调试 Web 项目的同时运行测试?

asp.net-mvc - 具有复杂子属性的 Kendo 对象的模型绑定(bind)问题

javascript - 在 ASP mvc 中 FileResult 返回后触发 javascript

c# - 如何在 .NET MVC3 中拦截当前 actionresult 的输出流?