自定义Asp.net MVC 3编辑器模板未被使用



我有一个使用Razor视图引擎的MVC 3 web应用程序。我想扩展默认编辑器模板,所以我想向input元素(如autofocus)添加额外的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类呈现相同的input type=text,但如果提供了任何其他属性,则还应使用这些属性。

然后我把这个文件放在~/Views/Shared/EditorTemplates/文件夹中,但这个模板似乎永远不会被选中,因为我得到的只是默认的输入文本框。

我做错了什么

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

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