9

The Razor view engine in ASP.NET MVC supports @helper to define little helper methods. It seems you can do much the same by adding extension methods to HtmlHelper. In what situations is it best to use each?

tereško
  • 58,060
  • 25
  • 98
  • 150
Jake Petroules
  • 23,472
  • 35
  • 144
  • 225

2 Answers2

9

Subjective question, so here's my subjective and biased answer: When the helper code involves amounts of C# code use a custom HtmlHelper and when it's primary markup you could use @helper. But assuming that when you have markup you could use a partial like @Html.Partial("_foo", SomeModel) or an editor/display templates like @Html.EditorFor(x => x.Foo), the @helper doesn't really have any practical use. Personally I've never used @helper by the way, and I've never recommended it's usage to people I've been consulting.

Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
  • This has been my thought, especially where the example of it http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx for DisplayPrice, i think this is the type of code it's best suited for. Almost completely logicless code that just affects presentation. Similarly would be to make your views DRYer. – Chris Marisic Jun 08 '11 at 22:12
  • If the view engine changes we don't have to rewrite helper methods in .cs but in declarative way (.cshtml) we have to. – Mangesh Jun 21 '11 at 16:47
8

Yes, that's true, though the @helpers seem a bit easier to work with if there's a good chunk of markup that's included--Html extensions and more extensive markup don't go that well together, IMO.

On the other hand, @helpers can't be unit tested like Html extensions.

ataddeini
  • 4,931
  • 26
  • 34