MVC 和 Razor 中 Html.TextboxFor 和 Html.EditorFor 的区别
Posted
技术标签:
【中文标题】MVC 和 Razor 中 Html.TextboxFor 和 Html.EditorFor 的区别【英文标题】:Differences between Html.TextboxFor and Html.EditorFor in MVC and Razor 【发布时间】:2011-06-17 02:31:30 【问题描述】:为什么默认情况下在添加新的“编辑”视图时会更改这些内容?使用EditorFor()
与TextboxFor()
相比有什么优势?
我找到了这个
默认情况下,创建和编辑脚手架现在使用 html.EditorFor 助手而不是 Html.TextBoxFor 助手。这改进了对模型元数据的支持,形式为 添加视图对话框生成视图时的数据注释属性。
【问题讨论】:
有没有人举例说明如何做到这一点?例如为 DatePicker 编写编辑器? 【参考方案1】:这是以前的 cmets 中未提及的基本区别之一:Readonly
属性将适用于文本框,但不适用于 EditorFor
。
@Html.TextBoxFor(model => model.DateSoldOn, new @readonly = "readonly" )
上面的代码可以工作,而下面的代码你不能控制只读。
@Html.EditorFor(model => model.DateSoldOn, new @readonly = "readonly" )
【讨论】:
您可以使用以下语法将 EditorFor 设为只读:@Html.EditorFor(model => model.DateSoldOn, new htmlAttributes = new @readonly = "readonly" )【参考方案2】:Html.TextboxFor
始终创建一个文本框 (<input type="text" ...
)。
EditorFor 查看类型和元信息,并可以呈现您提供的另一个控件或模板。
例如,对于 DateTime 属性,您可以创建一个使用 jQuery DatePicker 的模板。
【讨论】:
关于如何使用 editfor 实现 jquery datepicker 的任何示例? 感谢您使用日期时间大小写简化差异。 @Peru, here 或 here 是如何使用implement jquery datepicker
并将其与 EditorFor
一起使用是 here
如果想将 jquery datepicker 与 TextBoxFor 一起使用怎么办?【参考方案3】:
字符串数据类型的 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">
【讨论】:
这绝对是错误的答案,因为关键区别在于 Texbox 返回输入,而 editorfor 返回您的模板,其中输入是 editorfor 的默认模板。【参考方案4】:TextBoxFor:它将像文本输入一样呈现与指定表达式对应的html元素。简而言之,无论与控件绑定的属性的数据类型如何,它都会像输入文本框一样呈现。
EditorFor:这个控件有点聪明。它根据属性的数据类型呈现 HTML 标记。例如。假设模型中有一个布尔属性。要在视图中将此属性呈现为复选框,我们可以使用 CheckBoxFor 或 EditorFor。两者都将生成相同的标记。
使用 EditorFor 有什么好处?
我们知道,根据属性的数据类型,它会生成 html 标记。所以假设明天如果我们更改模型中属性的数据类型,则不需要更改视图中的任何内容。 EditorFor 控件将自动更改 html 标记。
【讨论】:
很好,简单的答案,即使是新手也能轻松吸收。 以上描述将有助于此链接forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel 有没有绝对应该使用 TextBoxFor 的情况?【参考方案5】:EditorFor
的优点是您的代码不绑定到<input type="text"
。因此,如果您决定更改文本框的呈现方式,例如将它们包装在 div
中,您可以简单地编写自定义编辑器模板 (~/Views/Shared/EditorTemplates/string.cshtml
),应用程序中的所有文本框都将自动受益于此更改而如果你硬编码了Html.TextBoxFor
,你将不得不在任何地方修改它。您还可以使用数据注释来控制呈现方式。
【讨论】:
有一个错误,可能在旧版本中。 EditorFor 无法识别“双重”。对于 'long',它认为它是 'int' 并且 step="0.01" 在属性中不起作用,所以我使用了 TextBoxFor 并添加了 @type='number' @step="0.01" 所以它起作用了以上是关于MVC 和 Razor 中 Html.TextboxFor 和 Html.EditorFor 的区别的主要内容,如果未能解决你的问题,请参考以下文章
使用 MVC5 C# 和 Razor 在局部视图中运行 javascript