ASP.NET MVC3 Code First Scaffolding | 列表视图不支持[Display(Name ="...")]属性

GTG*_*GTG 4 asp.net scaffolding ef-code-first asp.net-mvc-3

我尝试用[Display(Name="First Name")]以下方式装饰POCO课......

    public int Id { get; set; }

    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    public string LastName { get; set; }
Run Code Online (Sandbox Code Playgroud)

并且还使用该[DisplayName("First Name")]属性.

无论如何,生成的默认"列表"视图(使用"添加控制器"对话框)始终生成具有属性名称(如"FirstName")作为标题文本而不遵守属性值的表.创建视图可以正常使用[Display(Name=...)]属性.

List.ttT4模板实际上有:

    <th>
        <#= property.AssociationName #>
    </th>
Run Code Online (Sandbox Code Playgroud)

Create.tt模板有:

    <#
        if (property.IsForeignKey) {
    #>
            @Html.LabelFor(model => model.<#= property.Name #>, "<#= property.AssociationName #>")
    <#
        } else {
    #>
            @Html.LabelFor(model => model.<#= property.Name #>)
    <#
        }
    #>
Run Code Online (Sandbox Code Playgroud)

还有什么办法可以让默认的脚手架使用Display属性吗?或者我应该编辑List.ttT4模板以使用其他东西<# property.AssociationName #>吗?

当然我可以编辑生成的视图.但我喜欢在模板本身中"修复"这一点,以便所有生成的视图都是正确的而无需修改.

提前谢谢你的答案.

fre*_*tje 5

Display数据注解属性仅被荣幸Html.LabelFor的方法,所以作为你List.tt唯一的"打印出的"特别AssociationName为每个属性,这就是你实际得到的.

如果你想要打印出Display每个属性的名称,你还需要在那里吐出LabelFor方法,就像在你的Create.tt:

@Html.LabelFor(model => model.<#= property.Name #>)
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,只需复制整个东西,所以当属性是外键的情况也被处理.