7

我需要创建自定义 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 扩展方法。

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

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

请帮忙。

4

3 回答 3

9

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

@helper 的一个相关好处是您的 HTML 将受益于智能感知,而在 C# 代码中编写 HTML 则没有这样的好处。

此外,如果您正在编写一个不能在单个视图之外重用的助手,那么@helper 可以更容易地说明这一点。如果只打算使用一个 HtmlHelper 扩展方法(除非您设法将它放在一个类和命名空间中,而只有该一个视图会看到扩展方法),那么 HtmlHelper 扩展方法将会令人困惑。

于 2015-01-06T21:43:45.877 回答
3

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

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

您可以在此处找到带有示例的详细说明

于 2013-07-23T12:44:51.147 回答
3

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

这取决于。

有什么优点和缺点?

  • 自定义 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)
于 2013-07-23T12:49:39.660 回答