我需要创建自定义的html辅助方法。据我所知,有两种方法:
使用@helper razor语法。 http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx
创建HtmlHelper扩展方法。
什么解决方案更好,为什么?有什么优点和缺点?
我只在MVC 3中读到,当@helper在单独的.cshtml文件中全局创建时,不可能使用其他内置的html助手。不知道可能在MVC 4中它是可以存在的。
请帮忙。
答案 0 :(得分:8)
@helper的一个好处是,由于代码在视图中,您可以对其进行更改,而无需重新编译代码。这使您可以在开发过程中快速轻松地调整帮助程序。出于这个原因,我个人更喜欢在视图中保留标记。
@helper的一个相关好处是你的HTML将受益于intellisense,而用C#代码编写HTML则没有这样的好处。
此外,如果您正在编写一个不能在单个视图之外重复使用的帮助程序,那么@helper可以更容易地将其清除。如果只打算使用一个视图,HtmlHelper扩展方法会让人感到困惑(除非你设法将它放在一个类和命名空间中,只有那个视图才会看到扩展方法)。
答案 1 :(得分:4)
什么解决方案更好,为什么?
取决于。
有哪些优点和缺点?
@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)
答案 2 :(得分:3)