2011-08-25 84 views
9

我目前正在用ASP.NET MVC 3 w/Razor弄湿我的脚,并且对于呈现HTML输入元素的最合适的方式我有点困惑。HtmlHelper.EditorFor vs Html.TextBox vs Html输入

在我看来,有3种方法来呈现为一个模型的属性的那些元素:

  1. 使用的HtmlHelper EditorFor方法
  2. 使用Html.TextBox方法(字符串或数值的值)
  3. 使用简单的html输入元素,并使用内联Razor标签将值放入元素中。

这样做的建议方法是什么?我对EditorFor方法有点担心,因为我无法控制呈现的HTML,并且我认为MVC框架的一个邮件目标是避免WebForms的过度抽象。

您认为如何?最佳做法是什么?

谢谢!

回答

5

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

1

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

EditorFor有一些独特的优势,当你想做更复杂的事情,然后只是一个文本框。我有一个需要“职员”财产编辑的案例。因此,我的EditorFor模板创建了一个下拉列表,并选择正确的下拉列表,然后添加一个带有一些Javascript的文本框,用于按姓氏过滤列表(因为它非常冗长)。我可以手动做到这一点,但为什么?我的观点只是调用EditorFor(无论),模板被调用。代码非常干净。

所以我的建议是使用EditorFor,除非你有一个特定的情况下有意义不这样做。如果您稍后决定自定义编辑器,则只需更改该类型的模板即可!一个很好的例子是日期。基本的EditorFor只是一个文本框,但是制作一个自定义模板来连接jQuery日期选择器非常简单。如果您使用的是EditorFor,您可以稍后执行此操作,而无需更改任何视图以充分利用该视图,如果您将这些视图全部内联HTML文本框,则无法执行此操作。

0

最好的方法是HTML.EditorFor,因为您可以为给定类型创建编辑器模板,并且您的表单将在表单提交上正确地绑定到您的ModelView对象。