【问题标题】:Can I force T4MVC not to take a parameter from the URL of the current view, when generating new anchors within the view?在视图中生成新锚点时,我可以强制 T4MVC 不从当前视图的 URL 中获取参数吗?
【发布时间】: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


    【解决方案1】:

    "T4MVC 识别出当前页面的路由中有一个可用的应用程序 id 并使用该 id,因此它可以使用 DefaultWithId 路由而不是 Default 来生成索引的 URL -动作”

    T4MVC 没有这样的智能,而是这些智能内置于 MVC 路由系统中。但是许多 T4MVC 用户之前遇到过这种情况。各种参考:

    【讨论】:

    • 感谢您的参考!我仍然无法解决问题,但这给了我更多的工作空间。
    【解决方案2】:

    为什么不让action方法的id参数为null。像这样:

    public virtual ActionResult xyz(int? id)
    {
      return View();
    }
    

    现在只要你需要传递 id 就传递,否则离开它。希望它能解决你的问题。

    【讨论】:

    • 感谢您的回答,但问题不在于如何创建可以采用可选 ID 的操作。问题是我想强制 T4MVC 为任何不使用 Id 的操作生成没有 ID 的 URL。
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多