【发布时间】:2013-03-23 16:14:19
【问题描述】:
我想知道 HTML Helpers 或直接 HTML 构造视图,使用 Razor 视图引擎和 Html.LabelFor()、Html.TextBoxFor() 等原生方法之间是否存在显着的性能差异。
在任何情况下我应该避免使用 HtmlHelpers(性能方面)?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper
我想知道 HTML Helpers 或直接 HTML 构造视图,使用 Razor 视图引擎和 Html.LabelFor()、Html.TextBoxFor() 等原生方法之间是否存在显着的性能差异。
在任何情况下我应该避免使用 HtmlHelpers(性能方面)?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper
我更喜欢在构建表单时使用辅助方法。我也更喜欢不使用 Html.TextboxFor(),99% 的时间我使用 Html.EditorFor() 进行编辑。
所以,我构建了一个这样的表单:
@Html.LabelFor(model=>model.SomeField)
@Html.EditorFor(model=>model.SomeField)
@Html.ValidationMessageFor(model=>model.SomeField)
这给了我很多: 它确保我的所有字段都具有正确的名称和 ID,并且可以使用客户端验证,而无需我编写大量额外的标记。
使用 Html.EditorFor() 方法代替 Html.TextboxFor(),让我有机会为正确的字段使用正确的编辑器。 电子邮件字段应使用 type="email",日期应使用 type="date"。不是类型=“文本”。使用 EditorFor(),我可以制作模板,在这里我可以使用 TextboxFor() 或只是简单的标记。这样,每个带有电子邮件字段的模型都将获得相同的编辑器,每个日期都将获得相同的日期选择器。
简而言之: 如果您不使用 EditorForModel(),请始终使用 LabelFor()、EditorFor() 和 ValidationMessageFor()。如果您需要特殊标记,请使用模板。
【讨论】:
只要您以应有的方式使用帮助程序,设计人员学习如何使用应该是相当简单的。请记住,我们的目标是让事情变得简单,如果它们最终使事情变得更复杂,则意味着它们没有被正确使用。
性能差异可以忽略不计
【讨论】:
我没有关于性能的答案,但我有你最后一个问题的答案。
在任何情况下我应该避免使用 HtmlHelpers?
在我们的项目中,我们倾向于避免使用 HtmlHelpers,因为静态方法(例如 Html 辅助扩展方法)很难以我们想要的方式进行单元测试。
我们没有使用 HTML Helpers(扩展方法),而是为我们的视图提供了一个自定义基类。这个基类公开了我们的辅助服务(Uri、Html、DataEndpoint)并保持可测试性。
【讨论】: