我想知道使用 Razor 视图引擎和 Html.LabelFor()、Html.TextBoxFor() 等原生方法的 HTML Helpers 或直接 HTML 构造视图之间是否存在显着的性能差异。
有什么情况我应该避免使用 HtmlHelpers (性能方面)?
我想知道使用 Razor 视图引擎和 Html.LabelFor()、Html.TextBoxFor() 等原生方法的 HTML Helpers 或直接 HTML 构造视图之间是否存在显着的性能差异。
有什么情况我应该避免使用 HtmlHelpers (性能方面)?
我更喜欢在构建表单时使用辅助方法。我也不喜欢使用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)并使事情保持可测试性。