【问题标题】:HtmlHelper.EditorFor vs Html.TextBox vs Html inputHtmlHelper.EditorFor vs Html.TextBox vs Html 输入
【发布时间】:2011-08-25 16:44:50
【问题描述】:

我目前正在用带有 Razor 的 ASP.NET MVC 3 弄湿我的脚,我对呈现 HTML 输入元素的最合适方式有点困惑。

在我看来,有 3 种方法可以为模型的属性呈现这些元素:

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

推荐的方法是什么?我有点担心 EditorFor 方法,因为我无法控制呈现的 HTML,而且我认为 MVC 框架的邮件目标之一是避免 WebForms 的过度抽象。

你怎么看?这方面的最佳做法是什么?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      EditorFor 当你想做一些比文本框更复杂的事情时,EditorFor 有一些明显的优势。我有一个案例,我想要一个“staff”属性的编辑器。因此,我的 EditorFor 模板创建了一个包含员工列表的下拉列表,选择正确的下拉列表,然后还添加了一个带有一些 Javascript 的文本框,用于按姓氏过滤列表(因为它相当长)。我可以手动执行此操作,但为什么呢?我的视图只是调用 EditorFor(whatever) 并调用模板。结果代码非常干净。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-08-19
          • 1970-01-01
          • 2015-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-08
          • 2020-01-20
          相关资源
          最近更新 更多