为什么默认情况下在添加新的“编辑”视图时会更改这些内容?使用 EditorFor()
与 TextboxFor()
相比有哪些优势?
我找到了这个
默认情况下,Create 和 Edit 脚手架现在使用 Html.EditorFor 助手而不是 Html.TextBoxFor 助手。当“添加视图”对话框生成视图时,这改进了对数据注释属性形式的模型元数据的支持。
EditorFor
的优点是您的代码不绑定到 <input type="text"
。因此,如果您决定更改文本框的呈现方式,例如将它们包装在 div
中,您只需编写自定义编辑器模板 (~/Views/Shared/EditorTemplates/string.cshtml
),应用程序中的所有文本框都将自动受益于此更改而如果您对 Html.TextBoxFor
进行了硬编码,则必须在任何地方对其进行修改。您还可以使用数据注释来控制呈现方式。
TextBoxFor:它将呈现与指定表达式对应的文本输入html元素。简而言之,无论与控件绑定的属性的数据类型如何,它都会像输入文本框一样呈现。
EditorFor:这个控件有点聪明。它根据属性的数据类型呈现 HTML 标记。例如,假设模型中有一个布尔属性。要在视图中将此属性呈现为复选框,我们可以使用 CheckBoxFor 或 EditorFor。两者都将生成相同的标记。
使用 EditorFor 有什么好处?
正如我们所知,根据属性的数据类型,它会生成 html 标记。所以假设明天如果我们更改模型中属性的数据类型,则不需要更改视图中的任何内容。 EditorFor 控件将自动更改 html 标记。
Html.TextboxFor
始终创建一个文本框 (<input type="text" ...
)。
而 EditorFor 查看类型和元信息,并可以呈现您提供的另一个控件或模板。
例如,对于 DateTime 属性,您可以创建一个使用 jQuery DatePicker 的模板。
这是先前评论中未提及的基本区别之一:
Readonly
属性将适用于 textbox for,但不适用于 EditorFor
。
@Html.TextBoxFor(model => model.DateSoldOn, new { @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">
不定期副业成功案例分享