MVC和Razor中的Html.TextboxFor和Html.EditorFor之间的区别


170

为什么默认情况下在添加新的“编辑”视图时更改了这些设置?使用EditorFor()vs.有什么优势TextboxFor()

我找到了这个

默认情况下,创建和编辑脚手架现在使用Html.EditorFor助手而不是Html.TextBoxFor助手。当“添加视图”对话框生成视图时,以数据注释属性的形式改善了对模型上元数据的支持。


5
有没有人举这个例子?例如为DatePicker编写编辑器?
ShaneKm 2011年

Answers:


166

的优点EditorFor是您的代码不绑定到<input type="text"。所以,如果你决定要改变一些东西到你的文本框的呈现方式就像一个包裹它们的方面div,你可以简单地写一个自定义编辑模板(~/Views/Shared/EditorTemplates/string.cshtml),并在您的应用程序将自动从这一变化有利于所有的文本框,而如果你已经硬编码了Html.TextBoxFor你将不得不在任何地方对其进行修改。您也可以使用数据注释来控制其呈现方式。


有一个错误,可能是一个旧版本。EditorFor无法识别“双精度”。对于'long',它将其视为'int',并且step =“ 0.01”在属性中不起作用,因此我使用了TextBoxFor并添加了@ type ='number'@ step =“ 0.01”,所以它起作用了
Charlie

129

TextBoxFor:它将呈现类似于指定表达式的文本输入html元素。用简单的话来说,它将始终像输入文本框一样呈现,而不管与控件绑定的属性的数据类型如何。

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

使用EditorFor有什么好处?

众所周知,根据属性的数据类型,它会生成html标记。因此,假设明天如果我们更改模型中属性的数据类型,则无需更改视图中的任何内容。EditorFor控件将自动更改html标记。


15
简单好用的答案,即使是新手也很容易理解。
国王


有没有绝对应该使用TextBoxFor的情况?
eaglei22'3

55

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

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

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


12
关于如何使用editfor实现jquery datepicker的任何示例?
秘鲁

2
感谢您使用日期时间案例简化了区别。
国王

1
@Peru,在这里在这里是如何implement jquery datepicker使用它 EditorFor在这里
shaijut

8

这是先前注释中未提及的基本区别之一:
Readonly属性适用于的文本框,不适用于EditorFor

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

上面的代码有效,在下面的代码中您无法控制readonly

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

16
您可以使用以下语法将EditorFor设为只读:@ Html.EditorFor(model => model.DateSoldOn,new {htmlAttributes = new {@readonly =“ readonly”}}})
Doug Knudsen

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">

2
这是绝对错误的答案,因为关键区别在于Texbox返回输入,而editorfor返回您的模板,其中输入是editorfor的默认模板。
Artem G
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.