字符串 – 自定义Asp.net MVC 3编辑器模板没有被使用

我有一个使用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 /文件夹中,但是似乎这个模板从来没有被拿起来,因为我得到的只是认的输入文本框.

我究竟做错了什么?

解决方法

您的String.cshtml编辑器模板永远不会因为以下属性:[DataType(DataType.Text)]您用来装饰您的模型属性.

这使用〜/ Views / Shared / EditorTemplates / Text.cshtml模板.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...