编辑器的数据属性不起作用.
@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
Run Code Online (Sandbox Code Playgroud)
当我打开我的Chrome浏览器时,我无法看到我的文本框的任何数据属性.我试过护目镜,但没有找到任何有用的东西.
Mar*_*rio 23
实际上,您可以使用EditorFor并发送其他HTML属性.使用此重载并设置additionalViewData参数.它期望一个具有htmlAttributes属性的对象:
@Html.EditorFor(
model => model.SireTag,
new {
htmlAttributes = new { data_typeahead = "dsfsdfsd" }
}
)
Run Code Online (Sandbox Code Playgroud)
这将产生类似于:
<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd">
Run Code Online (Sandbox Code Playgroud)
Jim*_*iTh 13
第二个object参数Html.EditorFor不适用于HTML属性,而是适用于其他视图数据.该EditorFor助手不允许在例如在更具体的方式自定义HTML属性<input>的帮手做-他们把大部分的设置从模型元数据(例如[Attributes]).
最简单的"修复"方式显然正在下降EditorFor:
@Html.TextBoxFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
Run Code Online (Sandbox Code Playgroud)
或者,为属性编写自己的EditorTemplate.这可以允许您通过data_typeahead从ViewData["data_typeahead"](或"typeahead")检索值来使用(或简化)原始语法.
更进一步,更高级,您可以自己Attribute应用于您的模型属性+您自己的ModelMetadataProvider(或 - 更简单 - 使用IMetadataAware,更多在下面)将其转换为EditorTemplate可以使用的元数据 - 这是为了删除data-完全从您的视图决定属性,将您的通话转换为:
@Html.EditorFor(model => model.SireTag)
Run Code Online (Sandbox Code Playgroud)
......和你的模型如下:
public class MyModel
{
[Typeahead("dsfsdfsd")]
public string SireTag { get; set; }
}
Run Code Online (Sandbox Code Playgroud)