mvc的html编辑器的数据属性

Sha*_*del 14 asp.net-mvc

编辑器的数据属性不起作用.

@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)

  • 这绝对应该是答案. (3认同)

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_typeaheadViewData["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)

使用IMetadataAware的此方法示例