如何在WebGrid中为列标题使用DisplayName数据注释?

80b*_*wer 13 asp.net webgrid data-annotations asp.net-mvc-3

我有一个Car类,我试图使用WebGrid助手在MVC 3视图中显示.下面是Car及其元数据类.

车类:

[MetadataType(typeof(CarMetadata))]
public partial class Car
{
    // car implementation
}
Run Code Online (Sandbox Code Playgroud)

汽车元数据类:

public class CarMetadata
{        
    [DisplayName("Car Name")]
    [StringLength(100, ErrorMessageResourceType = typeof(ValidationText), ErrorMessageResourceName="CarNameDescriptionLength")]
    [Required]
    public string CarName { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

查看内容:

@model List<Car>
...
var grid = new WebGrid(Model, canPage: true, rowsPerPage: 10);
grid.Pager(WebGridPagerModes.NextPrevious);

@grid.GetHtml(
    htmlAttributes: new { id = "grid" },
    columns: grid.Columns(
        grid.Column("CarName", ?????)
    ));
Run Code Online (Sandbox Code Playgroud)

目标:我想弄清楚如何使用DisplayName数据注释作为WebGrid(?????)中的列标题文本.有谁知道这是如何实现的?

提前致谢!

Dar*_*rov 11

丑陋,但它可以工作:

grid.Column(
    "CarName", 
    ModelMetadata.FromLambdaExpression(
        car => car.CarName, 
        new ViewDataDictionary<Car>(new Car())
    ).DisplayName
)
Run Code Online (Sandbox Code Playgroud)

问题是WebGrid助手完全基于动态数据,绝对没有强类型,这也是我讨厌它的原因之一.Microsoft的WebMatrix团队必须是C#4.0动态功能的真正粉丝,因为他们的整个API只接受弱类型对象:-)

MvcContrib Grid要好得多.