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
,我从来没有向我一直在咨询的人推荐它。
答
是的,的确如此,尽管如果包含大量标记,@helper看起来更容易处理--Html扩展和更广泛的标记不能很好地结合在一起,IMO。
另一方面,@helpers不能像Html扩展那样进行单元测试。
+0
+1单元测试非常好。 – 2011-06-08 22:36:22
这一直是我的想法,特别是它的例子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
如果视图引擎发生变化,我们不必重写.cs中的帮助器方法,而是以声明的方式(.cshtml)重写。 – 2011-06-21 16:47:59