10

我有一个使用 Razor 视图引擎的 MVC 3 Web 应用程序。我想扩展默认编辑器模板,所以我想为input元素添加额外的 HTML5 属性,如autofocus.

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)

此模板应该input type=text使用相同的 CSS 类进行渲染,但如果提供了任何其他属性,则还应使用其他属性。

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

我究竟做错了什么?

4

1 回答 1

15

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

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

于 2012-02-04T20:59:07.250 回答