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

问题描述:

我越来越多地发现我的ASP.NET MVC视图需要一些逻辑来执行布局的情况。这些例程没有位于我的模型或我的控制器中。我有3个选项:什么时候应该使用HtmlHelper扩展方法?

  1. 在视图中写入很多<%%>。
  2. 在很多局部视图中少写出<%%>。
  3. 编写一个HtmlHelper扩展方法。

这是混淆了我最后的选择。如果逻辑只针对一个视图,可以这样做吗?该扩展将对所有其他视图的Html对象“可见”,并且永远不会被需要。

有什么建议吗?

我个人比较喜欢选择3(“写一个扩展的HtmlHelper方法”),因为这些代码机构借给自己很容易单元测试。

我真的希望扩展方法可以被放置在内部或嵌套类,因为你是对的,你将开始与万吨扩展方法,仅仅在一个视图中使用污染您的命名空间。

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

我想,一般,同时限制部分意见和扩展方法,可重用的组件,但我不迂腐了。如果您认为任何一种方法都可以提高代码的可读性,那么请继续使用它们。您可能需要考虑一个单独的命名空间/助手类,它只用于一组视图的辅助方法 - 有点像每个控制器分隔您的部分。

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

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

是的。阅读...

的 扩展将是“看得见”的每一个其他视图的 HTML对象,并 它永远不会被需要。

没有真正的。它依赖于如何注册视图的扩展方法。仅当您将名称空间添加到web.config 名称空间部分时才会出现这种情况。

如果你想使用一个单一的视图扩展方法只需要导入其命名空间的单一视图:

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

但不会与的HtmlHelper工作,因为所有的扩展方法必须是相同的命名空间的一部分。 – 2009-11-13 07:11:44

+0

它会。只需在单个页面上导入想要使用的命名空间。 – 2009-11-13 07:55:56

+0

不是如果我扩展方法添加到HtmlHelper虽然。为了工作,所有人必须与HtmlHelper存在于相同的命名空间中。 “ – 2009-11-13 23:24:25