【问题标题】:When should I use HtmlHelper Extension Methods?什么时候应该使用 HtmlHelper 扩展方法?
【发布时间】:2009-11-12 22:22:50
【问题描述】:

我越来越多地发现我的 ASP.NET MVC 视图需要一些逻辑来执行布局的情况。这些例程在我的模型或控制器中都没有位置。我有 3 个选择:

  1. 在视图中内联写入大量 。
  2. 在多个局部视图中少写 。
  3. 编写一个 HtmlHelper 扩展方法。

这是最后一个让我感到困惑的选项。如果逻辑仅特定于一个视图,是否可以这样做?该扩展对所有其他视图的 Html 对象都是“可见的”,并且永远不需要。

有什么建议吗?

【问题讨论】:

    标签: asp.net-mvc extension-methods html-helper


    【解决方案1】:

    我个人更喜欢选项 3(“编写 HtmlHelper 扩展方法”),因为这些代码体很容易进行单元测试。

    我真的希望扩展方法可以放在内部或嵌套类上,因为你是对的,你会开始用大量只在一个视图中使用的扩展方法污染你的命名空间。

    我建议将这些 HtmlHelper 扩展方法隔离在自定义命名空间中的静态类中每个视图,您可以在视图中手动引用该命名空间,以限制整个项目中可用的扩展方法的数量。

    【讨论】:

      【解决方案2】:

      通常,我会将部分视图和扩展方法都限制为可重用组件,但我对此并不迂腐。如果您觉得其中任何一个都提高了代码的可读性,那么请继续使用它们。您可能需要为仅由一组视图使用的辅助方法考虑一个单独的命名空间/辅助类 - 有点像为每个控制器隔离您的部分。

      您可能还想考虑使用更多的空格(即使是silent killer)来提高可读性。我在基本控制器中实现了输出压缩,以限制空白对下载时间的影响。

      【讨论】:

        【解决方案3】:

        如果符合逻辑可以这样做吗 只针对那一个视图?

        是的。继续阅读...

        扩展名对 每个其他视图的 Html 对象,以及 永远不需要它。

        不正确。这取决于您如何为视图注册扩展方法。仅当您将命名空间添加到 web.config namespaces 部分时才会出现这种情况。

        如果你想在单个视图上使用扩展方法,只需将其命名空间导入单个视图:

        <%@ Import Namespace="NamespaceOf.Your.ExtensionMethods.ForThisViewOnly"%>
        

        【讨论】:

        • 但这不适用于 HtmlHelper,因为所有扩展方法都必须属于同一个命名空间。
        • 会的。只需在单个页面上导入您要使用的命名空间。
        • 如果我向 HtmlHelper 添加扩展方法则不会。所有这些都必须存在于与 HtmlHelper 相同的命名空间中才能工作。
        • “必须与 HtmlHelper 存在于同一个命名空间中”——这是不正确的。您可以从您的命名空间导入您的扩展,它们将与 HtmlHelper 一起使用。
        • @Chris:是的,我使用了属于不同命名空间的自定义 HtmlHelpers。当用作@Dmytrii 指出的方式时,对我来说效果很好。
        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2023-04-02
        • 2011-04-15
        相关资源
        最近更新 更多