HtmlHelper.EditorFor vs Html.TextBox vs Html输入

时间:2011-08-25 16:44:50

标签: asp.net asp.net-mvc-3 razor

我目前正在使用ASP.NET MVC 3 w / Razor弄湿我的脚,我对渲染HTML输入元素的最合适方式感到困惑。

正如我所看到的,有三种方法可以为Model的属性渲染这些元素:

  1. 使用HtmlHelper EditorFor方法
  2. 使用Html.TextBox方法(对于字符串或数值)
  3. 使用普通的html输入元素,并使用内联Razor标记将值放入元素中。
  4. 这样做的推荐方法是什么?我有点担心EditorFor方法,因为我对渲染的HTML没有任何控制权,我认为MVC框架的一个邮件目标是避免WebForms的过度抽象。

    你怎么看?这是什么最好的做法?

    谢谢!

3 个答案:

答案 0 :(得分:5)

Html.EditorFor是首选方式。您可以通过为给定类型编写自定义editor templates来控制HTML。 ModelMetadata允许您控制生成的输入字段的类型。如果您需要应用其他自定义属性,还可以编写custom metadata provider

答案 1 :(得分:1)

您实际上可以控制EditorFor生成的HTML:you can create custom templates for each type

当你想要做一些比文本框更复杂的事情时,EditorFor有一些明显的优势。我有一个案例,我想要一个“员工”财产的编辑。所以我的EditorFor模板创建了一个带有人员列表的下拉列表,选择了正确的列表,然后还添加了一个带有一些Javascript的文本框,用于按姓氏过滤列表(因为它相当冗长)。我可以手动完成,但为什么呢?我的视图只调用EditorFor(无论如何)并调用模板。因此代码非常干净。

所以我的建议是使用EditorFor,除非你有一个特殊的情况,这是不合理的。如果您决定稍后自定义编辑器,您只需更改类型的模板即可!一个很好的例子是约会。基本的EditorFor只是一个文本框,但是制作一个连接jQuery日期选择器的自定义模板非常容易。如果您使用的是EditorFor,那么您可以在以后执行此操作,而无需更改任何视图以利用它,如果您使用HTML文本框进行内联操作,则无法执行此操作。

答案 2 :(得分:0)

最好的方法是HTML.EditorFor,因为您可以为给定类型创建编辑器模板,并且您的表单将在表单提交时自动绑定到您的模型视图对象。