ASP.NET MVC:Razor @helper vs HtmlHelper的扩展方法 - 哪些是首选?

问题描述:

ASP.NET MVC中的Razor视图引擎支持@helper来定义一些辅助方法。看来你可以通过向HtmlHelper添加扩展方法来做同样的事情。在什么情况下最好使用每个?ASP.NET MVC:Razor @helper vs HtmlHelper的扩展方法 - 哪些是首选?

主观性问题,所以这里是我的主观和偏见答案:当辅助代码涉及大量的C#代码时,请使用自定义的HtmlHelper,当它是主标记时,您可以使用@helper。但假设您有标记时可以使用@Html.Partial("_foo", SomeModel)@Html.EditorFor(x => x.Foo)等编辑器/显示模板,@helper实际上没有任何实际用途。就我个人而言,我从来没有用过@helper,我从来没有向我一直在咨询的人推荐它。

+0

这一直是我的想法,特别是它的例子http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax DisplayPrice的-within-razor.aspx,我认为这是它最适合的代码类型。几乎完全无逻辑的代码只影响表示。同样,将您的意见DRYER。 – 2011-06-08 22:12:53

+0

如果视图引擎发生变化,我们不必重写.cs中的帮助器方法,而是以声明的方式(.cshtml)重写。 – 2011-06-21 16:47:59

是的,的确如此,尽管如果包含大量标记,@helper看起来更容易处理--Html扩展和更广泛的标记不能很好地结合在一起,IMO。

另一方面,@helpers不能像Html扩展那样进行单元测试。

+0

+1单元测试非常好。 – 2011-06-08 22:36:22