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

Sha*_*eKm 163 asp.net-mvc razor asp.net-mvc-3

为什么默认情况下在添加新的"编辑"视图时会更改这些内容?使用EditorFor()vs.有什么好处TextboxFor()

我找到了这个

默认情况下,Create和Edit脚手架现在使用Html.EditorFor助手而不是Html.TextBoxFor助手.当"添加视图"对话框生成视图时,这会以数据注释属性的形式改进对模型元数据的支持.

Dar*_*rov 159

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


小智 121

TextBoxFor:它将呈现与指定表达式对应的文本输入html元素.简单来说,它总是像输入文本框一样呈现,而不管属性的数据类型是否与控件绑定.

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

使用EditorFor有什么好处?

我们知道,根据属性的数据类型,它会生成html标记.所以假设我们明天改变模型中属性的数据类型,不需要在视图中更改任何内容.EditorFor控件将自动更改html标记.

  • 很棒,简单的答案,即使是新手也很容易吸收. (13认同)

GvS*_*GvS 55

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

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

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

  • 关于如何使用editfor实现jquery datepicker的任何示例? (12认同)
  • 感谢您通过使用日期时间案例来简化差异. (2认同)

小智 7

这是以前评论中未提及的基本差异之一:
Readonly属性将与textbox一起使用,并且无法使用EditorFor.

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,如下所示,你无法控制readonly.

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用以下语法使EditorFor只读:@ Html.EditorFor(model => model.DateSoldOn,new {htmlAttributes = new {@readonly ="readonly"}}) (12认同)