如果在MVC3中未指定显示名称属性,我可以动态添加显示名称属性吗?

时间:2011-08-19 19:24:14

标签: c# asp.net-mvc-3

我认为如果我可以将一些可以动态添加显示名称属性的东西连接到任何已经没有的属性,那将是非常酷的。我的想法是,如果我有一个名为FirstName的属性,我可以倾斜它并使其成为“名字”

MVC似乎拥有一切的提供者模型。有什么我可以用来做这个吗?

3 个答案:

答案 0 :(得分:3)

这只是Doug回答的扩展版本

public class MyModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
    public override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, string propertyName)
    {
        var result = base.GetMetadataForProperty(modelAccessor, containerType, propertyName);
        if (result.DisplayName.IsEmpty()) result.DisplayName = propertyName.InflectTo().Titleized;
        return result;
    }
}

并在mvc中将其注册到全局asax中,如下所示:

ModelMetadataProviders.Current = new MyModelMetadataProvider();

答案 1 :(得分:1)

是的,你可以这样做。您只需要创建自己的ModelMetaDataprovider并覆盖DisplayName。

答案 2 :(得分:-1)

你可以使用[DisplayName]属性来实现目标For property,如果你想用于Model Basis,那么GoFor MOdelMetaDataProvider

ModelMetaDataProvider MSDN Docs

Sample Tutorial for ModelMetaDataProvider

Another Sample For ModelMetaDataProvider