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

为什么在添加新的“编辑”视图时,默认情况下会更改这些内容? 使用 EditorFor()TextboxFor()的优势是什么?

我找到了这个

默认情况下,Create 和 Edit 脚手架现在使用 Html。编辑器助手而不是 HTML。TextBoxFor helper.这改进了对模型上的元数据的支持,其形式为 “添加视图”对话框生成视图时的数据批注属性。

引自这里。

146892 次浏览

EditorFor的优点是您的代码不绑定到 <input type="text"。因此,如果你决定改变你的文本框呈现方式,比如在 div中包装它们,你可以简单地编写一个自定义编辑器模板(~/Views/Shared/EditorTemplates/string.cshtml) ,你应用程序中的所有文本框将自动从这个改变中受益,而如果你硬编码了 Html.TextBoxFor,你将不得不到处修改它。您还可以使用数据注释来控制呈现的方式。

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

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

例如,对于 DateTime 属性,您可以创建一个使用 jQueryDatePicker 的模板。

TextBoxFor : 它将呈现与指定表达式对应的文本输入 html 元素类似的效果。简单来说,它总是呈现为输入文本框,而不考虑与控件绑定的属性的数据类型。

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

使用 EditorFor 的优点是什么?

我们知道,根据属性的数据类型,它会生成 html 标记。因此,假设明天我们更改了模型中属性的数据类型,那么就不需要更改视图中的任何内容。EditorFor 控件将自动更改 html 标记。

字符串数据类型的 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">

这是以前的评论没有提到的基本差异之一:
属性将与文本框一起工作,它将不与 EditorFor一起工作。

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

上面的代码可以正常工作,但是和下面的代码一样,你不能对 只读进行控制。

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