MVC和Razor中的Html.TextboxFor和Html.EditorFor之间的区别
为什么在添加一个新的“编辑”视图时默认情况下会改变? 使用EditorFor()
和TextboxFor()
时有什么优势?
我find了这个
默认情况下,创build和编辑脚手架现在使用Html.EditorFor帮手,而不是Html.TextBoxFor帮手。 当“添加视图”对话框生成视图时,这会以数据注记属性的forms改进对模型上元数据的支持。
EditorFor
的优点是你的代码不会绑定到<input type="text"
。 所以如果你决定改变你的文本框的渲染方式,就像把它们包装到一个div
你可以直接在你的应用程序中编写一个自定义的编辑器模板( ~/Views/Shared/EditorTemplates/string.cshtml
)和所有的文本框将自动受益于这种变化,而如果你有硬编码Html.TextBoxFor
你将不得不修改它到处。 你也可以使用数据注解来控制它的呈现方式。
TextBoxFor :它将渲染像文本inputhtml元素对应的指定expression式。 简单地说,它将总是像input文本框一样呈现,而不pipe与该控件绑定的属性的数据types如何。
EditorFor :这个控件有点聪明。 它根据属性的数据types呈现HTML标记。 例如,假设模型中有一个布尔属性。 要将视图中的这个属性作为一个checkbox,我们可以使用CheckBoxFor或EditorFor。 两者都会生成相同的标记。
使用EditorFor的优点是什么?
正如我们所知,根据属性的数据types,它会生成html标记。 所以假设明天如果我们改变模型中的属性的数据types,不需要改变视图中的任何东西。 EditorFor控件将自动更改html标记。
Html.TextboxFor
总是创build一个文本框( <input type="text" ...
)。
虽然EditorFor查看types和元信息,并可以呈现另一个控件或您提供的模板。
例如,对于DateTime属性,您可以创build一个使用jQuery DatePicker的模板。
这是以前评论中没有提到的基本差异之一:
Readonly
财产将与文本框工作,它不会与EditorFor
工作。
@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
上面的代码工作,在跟随你无法控制只读 。
@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
string数据types的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">