添加新的"edit"视图时,为什么默认情况下会更改这些内容?使用 EditorFor() 与 TextboxFor() 有什么好处?
EditorFor()
TextboxFor()
我找到了这个
默认情况下,Create和Edit脚手架现在使用Html.EditorFor助手而不是Html.TextBoxFor助手 . 当“添加视图”对话框生成视图时,这会以数据注释属性的形式改进对模型元数据的支持 .
Html.TextboxFor 始终创建一个文本框( <input type="text" ... ) .
Html.TextboxFor
<input type="text" ...
当EditorFor查看类型和元信息时,可以呈现您提供的另一个控件或模板 .
例如,对于DateTime属性,您可以创建使用jQuery DatePicker的模板 .
EditorFor 的优点是您的代码与 <input type="text" 无关 . 因此,如果你决定改变文本框的方式,就像在_2378062中包装它们一样,你可以简单地编写一个自定义编辑器模板( ~/Views/Shared/EditorTemplates/string.cshtml ),你的应用程序中的所有文本框都将自动受益于这种变化,而如果你有硬编码 Html.TextBoxFor 你必须在任何地方修改它 . 您还可以使用数据注释来控制渲染方式 .
EditorFor
<input type="text"
~/Views/Shared/EditorTemplates/string.cshtml
Html.TextBoxFor
TextBoxFor :它将呈现与指定表达式对应的文本输入html元素 . 简单来说,它总是像输入文本框一样呈现,而不管属性的数据类型是否与控件绑定 .
EditorFor :这个控件有点聪明 . 它根据属性的数据类型呈现HTML标记 . 例如 . 假设模型中有一个布尔属性 . 要在视图中将此属性呈现为复选框,我们可以使用CheckBoxFor或EditorFor . 两者都将生成相同的标记 .
使用EditorFor有什么好处?
我们知道,根据属性的数据类型,它会生成html标记 . 所以假设我们明天改变模型中属性的数据类型,不需要在视图中更改任何内容 . EditorFor控件将自动更改html标记 .
这是之前评论中未提及的基本差异之一:Readonly 属性将与textbox for一起使用,它不适用于 EditorFor .
Readonly
@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
以上代码有效,如下所示,您无法控制 readonly .
@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
字符串数据类型的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">
5 回答
Html.TextboxFor
始终创建一个文本框(<input type="text" ...
) .当EditorFor查看类型和元信息时,可以呈现您提供的另一个控件或模板 .
例如,对于DateTime属性,您可以创建使用jQuery DatePicker的模板 .
EditorFor
的优点是您的代码与<input type="text"
无关 . 因此,如果你决定改变文本框的方式,就像在_2378062中包装它们一样,你可以简单地编写一个自定义编辑器模板(~/Views/Shared/EditorTemplates/string.cshtml
),你的应用程序中的所有文本框都将自动受益于这种变化,而如果你有硬编码Html.TextBoxFor
你必须在任何地方修改它 . 您还可以使用数据注释来控制渲染方式 .TextBoxFor :它将呈现与指定表达式对应的文本输入html元素 . 简单来说,它总是像输入文本框一样呈现,而不管属性的数据类型是否与控件绑定 .
EditorFor :这个控件有点聪明 . 它根据属性的数据类型呈现HTML标记 . 例如 . 假设模型中有一个布尔属性 . 要在视图中将此属性呈现为复选框,我们可以使用CheckBoxFor或EditorFor . 两者都将生成相同的标记 .
使用EditorFor有什么好处?
我们知道,根据属性的数据类型,它会生成html标记 . 所以假设我们明天改变模型中属性的数据类型,不需要在视图中更改任何内容 . EditorFor控件将自动更改html标记 .
这是之前评论中未提及的基本差异之一:
Readonly
属性将与textbox for一起使用,它不适用于EditorFor
.以上代码有效,如下所示,您无法控制 readonly .
字符串数据类型的html输出也略有不同 .