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

Rob*_*nik 10 string html5 editortemplates razor asp.net-mvc-3

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

AdditionalMetadataAttribute用来指定我的实体上的某些属性是自动聚焦:

public class MyEntity
{
    public int Id { get; set; }

    [Required]
    [AdditionalMetadata("autofocus", true)]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    ...
}
Run Code Online (Sandbox Code Playgroud)

由于视图脚手架使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

Dar*_*rov 15

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

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

  • 还有一个问:我想通过不重复代码来合并两个编辑器模板(**Text**和**String**),所以我想在另一个内部引用一个(**Text**应该只使用**串**).我使用`@ Html.Partial("〜/ Views/Shared/EditorTemplates/String.cshtml")`但是我收到一个错误:*找不到部分视图'〜/ Views/Shared/EditorTemplates/String.cshtml'或没有视图引擎支持搜索的位置.* (2认同)