ASP.NET MVC @helper语法与Html Helper扩展方法

时间:2013-07-23 09:09:18

标签: c# asp.net-mvc extension-methods razor-declarative-helpers

我需要创建自定义的html辅助方法。据我所知,有两种方法:

  1. 使用@helper razor语法。 http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

  2. 创建HtmlHelper扩展方法。

  3. 什么解决方案更好,为什么?有什么优点和缺点?

    我只在MVC 3中读到,当@helper在单独的.cshtml文件中全局创建时,不可能使用其他内置的html助手。不知道可能在MVC 4中它是可以存在的。

    请帮忙。

3 个答案:

答案 0 :(得分:8)

@helper的一个好处是,由于代码在视图中,您可以对其进行更改,而无需重新编译代码。这使您可以在开发过程中快速轻松地调整帮助程序。出于这个原因,我个人更喜欢在视图中保留标记。

@helper的一个相关好处是你的HTML将受益于intellisense,而用C#代码编写HTML则没有这样的好处。

此外,如果您正在编写一个不能在单个视图之外重复使用的帮助程序,那么@helper可以更容易地将其清除。如果只打算使用一个视图,HtmlHelper扩展方法会让人感到困惑(除非你设法将它放在一个类和命名空间中,只有那个视图才会看到扩展方法)。

答案 1 :(得分:4)

  

什么解决方案更好,为什么?

取决于。

  

有哪些优点和缺点?

  • 自定义HtmlHelper扩展的优点:
    • 无论您使用什么视图引擎
    • ,它都会有效
    • 可单元测试
    • 可在应用程序之间移植
  • 自定义HtmlHelper扩展的缺点:
    • 在C#
    • 中编写大量HTML逻辑可能会变得很麻烦
  • @helper的优点:
    • 没见过,我从来没用过它
  • @helper的缺点:
    • 没见过,我从来没用过它

实际上,@helper是恕我直言,完全没用。当你想要我提到的关于自定义HtmlHelper扩展的优点时,你可以构建一个自定义的HtmlHelper扩展。

如果你遇到我提到的关于自定义HtmlHelper扩展的一些缺点,你可以使用局部视图。

  

我只在MVC 3中读到了@helper在单独创建时全局创建的内容   .cshtml文件,不可能使用其他内置的html助手。

那是错的。你完全可以使用其他的Html助手。您只需将它们作为参数传递:

@helper FooBar(HtmlHelper html) {
    feel free to use the html helper here
}

从视图中消费时:

@HelperName.FooBar(Html)

答案 2 :(得分:3)

它们可以像用户控件和自定义控件

在视图中使用@helper进行剃刀样式格式设置。 使用通用解决方案的扩展方法, 例如,重载带有其他参数的标签创建。

您可以使用示例here

找到详细说明