编辑器的数据属性不工作。
@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
当我打开我的 chrome 浏览器时,我看不到我的文本框的任何数据属性。我尝试了护目镜,但没有发现任何有用的东西。
编辑器的数据属性不工作。
@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
当我打开我的 chrome 浏览器时,我看不到我的文本框的任何数据属性。我尝试了护目镜,但没有发现任何有用的东西。
实际上,您可以使用 EditorFor 并发送额外的 HTML 属性。使用此重载并设置additionalViewData
参数。它需要一个具有htmlAttributes
属性的对象:
@Html.EditorFor(
model => model.SireTag,
new {
htmlAttributes = new { data_typeahead = "dsfsdfsd" }
}
)
这将产生类似的东西:
<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd">
第二个object
参数Html.EditorFor
不是用于 HTML 属性,而是用于附加视图数据。EditorFor
助手不允许以例如更具体的助手<input>
所做的方式自定义 HTML 属性 - 他们从模型元数据(例如[Attributes]
)中获取大部分设置。
“修复”的最简单方法显然是下降EditorFor
:
@Html.TextBoxFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })
或者,为该属性编写您自己的 EditorTemplate。这可以允许您通过从(或“预先输入”)检索data_typeahead
值来使用(或简化)原始语法。ViewData["data_typeahead"]
更进一步,更高级,您可以将自己Attribute
的属性应用于您的模型属性 + 您自己的ModelMetadataProvider
(或者 - 更简单 - 使用IMetadataAware
,更多内容见下文)将其转换为 EditorTemplate 可以使用的元数据 - 这是为了删除完全从您的视图中决定data-
属性,将您的调用变成:
@Html.EditorFor(model => model.SireTag)
...和你的模型变成这样的:
public class MyModel
{
[Typeahead("dsfsdfsd")]
public string SireTag { get; set; }
}
此方法使用 IMetadataAware 的示例:
[AttributeUsage(AttributeTargets.Property)]
public class TypeaheadAttribute : Attribute, IMetadataAware
{
private readonly string value;
public TypeaheadAttribute(string value)
{
this.value = value;
}
public void OnMetadataCreated(ModelMetadata metadata)
{
metadata.AdditionalValues["typeahead"] = value;
}
}
然后可以使用ViewContext.ViewData.ModelMetadata.AdditionalValues
(字典)在 EditorTemplate 中提取此元数据条目,并将结果添加到传递给 eg 的属性字典中Html.TextBox
。