【问题标题】:Why Strongly Typed Html.ActionLink is Not in ASP.NET MVC 1为什么强类型 Html.ActionLink 不在 ASP.NET MVC 1 中
【发布时间】:2025-12-22 16:45:16
【问题描述】:

好的,Microsoft 从测试版的主 ASP.NET MVC 程序集中删除了 strongly typed HTML.ActionLink,因为“of some features that can still evolve in future release of ASP.NET MVC

但是现在MVC正式发布了,为什么强类型的HTML.ActionLink还没回来?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:
    【解决方案2】:

    两个原因:

    1. 它们目前不支持 ActionNameAttribute,因此可以说它们已损坏。
    2. 没有缓存,因此它们目前比框架方法慢大约 10 倍。

    另外,我同意 matt 的观点,即我们不应该假装 URI 不是字符串。

    【讨论】:

      【解决方案3】:

      我相信它已被转移到期货包中。

      我认为强类型方法无论如何都会误导,记住,在幕后它只是一堆字符串操作,毕竟 URL 只是字符串!

      【讨论】:

      • 不...不是,它比单纯的语法目的更有用。如果您需要重构,如果您有强类型方法,您可以只使用重构工具重命名所有实例。但是,如果您使用的是基于字符串的操作,那么我只能祝您在寻找每个硬编码的字符串引用时好运。
      • 我应该更明确一点,我的意思是在 MVC 的底层(不是我的代码!),强类型方法将该信息转换为字符串以生成 URL。请参阅 CodePlex 上的源代码,特别是 ExpressionHelper.GetRouteValuesFromExpression
      • .. 如果您阅读 Matt Hinze 的回答中的帖子,您会发现强类型 ActionLink() 的类型化性质跳过了您更喜欢的更多内部 MVC。 MVC 需要将动作名称“映射”到方法 - 强类型 ActionLink() 阻止 MVC 这样做。
      【解决方案4】:

      Matt 提供的链接已移至“http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx”。而且我同意“强类型 ActionLink() 的类型化性质跳过了您更喜欢的更多内部 MVC”;但我觉得解决这个问题的方法不是放弃它并使用魔术字符串,而是改进 ActionLink() 以生成考虑映射的链接!

      【讨论】: