2011-11-16 86 views
1

有在ASP.NET MVC中创建自定义HTML辅助的方法有两种:什么时候应该将HTML助手作为扩展方法而不是简单的静态方法编写?

  1. 您可以创建与输出HTML静态方法的类,或
  2. 您可以添加一个扩展方法为HtmlHelper类。

选项#1看起来更简单,更容易。

  • 选项2的优点是什么?
  • 我什么时候想要这样做而不是选项#1?
  • 选项#2是否为您提供任何好处或附加功能?

编辑补充:

在这种特定情况下,我想输出我们通过一个一堆条件逻辑形成的字符串。把它放在我的模型中似乎是错误的,但是在剃刀中全部使用它似乎是单调乏味和不必要的 - 或者我错了吗?

+0

还有第三个选项,我会推荐你​​:使用ViewModels和Display \ Editor模板。这样你就不会打破模式。所有HTML都保留在视图中,无需通过扩展和/或静态方法编写代码。 – Joao

+0

请查看[this](http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html)以获得更多关于如何操作的信息。这是做你即将做的事情的正确方法。 – Joao

回答

0

谈论@helper语法在我们目前的项目一开始我们做大量的HtmlHelper扩展,但我们意识到,这仅仅是错误的做法,主要是因为:

  • 它打破了这种模式,因为您在视图外部通过C#代码编写HTML。
  • 这不是验证友好的!

因此,我们只是抛出几乎所有的帮手,我们已经实现了所有控制器的ViewModels和模板。这是做这件事的正确方法。

这是最好的地方开始:ASP.NET MVC 2 Templates, Part 1: Introduction

底线,如果你通过代码构建HTML,什么是错在项目的逻辑/模式。

+0

我明白你为什么说HTMLHelpers是坏的......但看过在Templates中,我不明白他们在这种特殊情况下能够如何帮助我,我试图输出一个通过一系列条件逻辑创建的字符串(带有一些HTML)。也许我误解了? – sangfroid

+0

该逻辑的位置在控制器中。在视图中,您只需传递需要很少或(理想情况下)没有任何逻辑的数据。忘记ViewBag \ ViewData。将所有数据传递给通过ViewModel查看并通过DisplayTemplates显示。相信我,你会长期感谢。 – Joao

+0

有趣!我没有想过将字符串构建逻辑放入控制器中。我想我会给出一个结果,看看结果如何。谢谢! – sangfroid

0

我发现选项2更清洁,可以编写HTML,因为它与C#代码是分开的。在实际的剃须刀视图中,你应该把你的HTML。

这是假设你是在剃刀

+0

我不确定我们在讨论同样的事情。我见过的所有例子都是这样的: <%= Html.MethodName(“arg1”,“arg2”)%> – sangfroid

相关问题