我什么时候应该使用HtmlHelper扩展方法?

时间:2009-11-12 22:22:51

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

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

  1. 写下大量的< %%>在视图中内联。
  2. 少写< %%>在许多部分观点中。
  3. 编写HtmlHelper扩展方法。
  4. 这是让我困惑的最后一个选择。如果逻辑只针对那个视图,那么可以这样做吗?

    表示扩展名对每个其他视图的Html对象都是“可见的”

    有什么建议吗?

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

  

如果逻辑可以这样做   仅针对那一个观点?

是。请继续阅读...

  

在   扩展将是“可见的”   每个其他视图的Html对象,以及   永远不需要它。

不是。它依赖于您为视图注册扩展方法的方式。只有在将名称空间添加到web.config 名称空间部分时才会出现这种情况。

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

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