我有一个使用Razor视图引擎的MVC 3 Web应用程序.我想扩展默认编辑器模板,所以我想添加额外的
HTML5属性到输入元素,如自动对焦.
我正在使用AdditionalMetadataAttribute来指定我的实体的某些属性为自动对焦:
public class MyEntity { public int Id { get; set; } [required] [AdditionalMetadata("autofocus",true)] [DataType(DataType.Text)] public string Name { get; set; } ... }
因为视图脚手架使用EditorFor方法,我决定玩,想要覆盖默认的String.cshtml模板,以便它也添加任何额外的元数据作为属性.要玩,意味着我不想使用TextBoxFor在哪里可以控制输入的属性.
这是我稍微改变的String.cshtml,它将所有其他元数据属性添加为输入HTML属性:
@{ // System.Diagnostics.Debugger.Break(); this.ViewData.ModelMetadata.AdditionalValues.Add("class","text-Box single-line"); } @Html.TextBox(string.Empty,ViewContext.ViewData.TemplateInfo.FormattedModelValue,this.ViewData.ModelMetadata.AdditionalValues)
该模板应该使用相同的CSS类,使用相同的输入类型=文本,但是如果提供了其中任何一个属性,也可以使用其他属性.
然后我把这个文件放在〜/ Views / Shared / EditorTemplates /文件夹中,但是似乎这个模板从来没有被拿起来,因为我得到的只是默认的输入文本框.
我究竟做错了什么?