mvc的html编辑器的数据属性

时间:2013-08-11 22:27:16

标签: asp.net-mvc

编辑器无法正常工作的数据属性。

@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })

当我打开我的Chrome浏览器时,我无法看到我的文本框的任何数据属性。 我试过护目镜,但没有找到任何有用的东西。

2 个答案:

答案 0 :(得分:20)

实际上你可以使用EditorFor并发送其他HTML属性。使用此overload并设置additionalViewData参数。它期望一个具有htmlAttributes属性的对象:

@Html.EditorFor(
    model => model.SireTag,
    new { 
        htmlAttributes = new { data_typeahead = "dsfsdfsd" }
    }
)

这将生成如下内容:

<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd">

答案 1 :(得分:13)

object的第二个Html.EditorFor参数不适用于HTML属性,而是适用于其他视图数据。 EditorFor帮助程序不允许自定义HTML属性,例如:更具体的<input>帮助程序 - 它们从模型元数据中获取大部分设置(例如[Attributes])。

“修复”的最简单方法显然是放弃EditorFor

@Html.TextBoxFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })

或者,为属性编写自己的EditorTemplate。这可以允许您使用(或简化)原始语法,方法是从data_typeahead(或“typeahead”)检索ViewData["data_typeahead"]值。

更进一步,更高级,您可以将自己的Attribute应用于您的模型属性+您自己的ModelMetadataProvider(或 - 更简单 - 使用IMetadataAware,更多内容如下)将其转换为EditorTemplate可以使用的元数据 - 这是为了完全从您的View中删除关于data-属性的决定,将您的调用转换为:

@Html.EditorFor(model => model.SireTag)

......和你的模型如下:

public class MyModel
{
    [Typeahead("dsfsdfsd")]
    public string SireTag { get; set; }
}

Example of this approach using IMetadataAware