首页 文章

MVC和Razor中的Html.TextboxFor和Html.EditorFor之间的差异

提问于
浏览
159

添加新的"edit"视图时,为什么默认情况下会更改这些内容?使用 EditorFor()TextboxFor() 有什么好处?

我找到了这个

默认情况下,Create和Edit脚手架现在使用Html.EditorFor助手而不是Html.TextBoxFor助手 . 当“添加视图”对话框生成视图时,这会以数据注释属性的形式改进对模型元数据的支持 .

5 回答

  • 53

    Html.TextboxFor 始终创建一个文本框( <input type="text" ... ) .

    当EditorFor查看类型和元信息时,可以呈现您提供的另一个控件或模板 .

    例如,对于DateTime属性,您可以创建使用jQuery DatePicker的模板 .

  • 114

    EditorFor 的优点是您的代码与 <input type="text" 无关 . 因此,如果你决定改变文本框的方式,就像在_2378062中包装它们一样,你可以简单地编写一个自定义编辑器模板( ~/Views/Shared/EditorTemplates/string.cshtml ),你的应用程序中的所有文本框都将自动受益于这种变化,而如果你有硬编码 Html.TextBoxFor 你必须在任何地方修改它 . 您还可以使用数据注释来控制渲染方式 .

  • 153

    TextBoxFor :它将呈现与指定表达式对应的文本输入html元素 . 简单来说,它总是像输入文本框一样呈现,而不管属性的数据类型是否与控件绑定 .

    EditorFor :这个控件有点聪明 . 它根据属性的数据类型呈现HTML标记 . 例如 . 假设模型中有一个布尔属性 . 要在视图中将此属性呈现为复选框,我们可以使用CheckBoxFor或EditorFor . 两者都将生成相同的标记 .

    使用EditorFor有什么好处?

    我们知道,根据属性的数据类型,它会生成html标记 . 所以假设我们明天改变模型中属性的数据类型,不需要在视图中更改任何内容 . EditorFor控件将自动更改html标记 .

  • 7

    这是之前评论中未提及的基本差异之一:
    Readonly 属性将与textbox for一起使用,它不适用于 EditorFor .

    @Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
    

    以上代码有效,如下所示,您无法控制 readonly .

    @Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
    
  • 4

    字符串数据类型的html输出也略有不同 .

    Html.EditorFor:  
    <input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">
    
    Html.TextBoxFor:
    <input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">
    

相关问题