【问题标题】:Apply custom attributes to properties programmatically以编程方式将自定义属性应用于属性
【发布时间】:2011-10-28 00:06:23
【问题描述】:

我正在使用我无法访问代码的业务对象 API。我直接在我的 razor 视图上使用这些对象,并希望能够在对象实例化后应用我的自定义 displayName 属性。

所以,不要这样:

[DisplayName("First Name")]
public string GivenName;

我想做:

Profile.GivenName.DisplayName("FirstName");

我了解如何创建自定义属性,但无法将它们编程化。

一旦我能做到这一点,我就可以应用更多的 DataAnnotations。

【问题讨论】:

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


    【解决方案1】:

    为什么不从业务对象派生一个类并使用MetaDataType Attribute

    [MetadataType(typeof(IMyAttributes))
    public DerivedClass : BusinessClass
    {
    }
    
    public interface IMyAttributes
    {
      [Required]
      public string Name { get; set; }
    }
    

    【讨论】:

    • 这是个好主意。我试图避免创建一个额外的层,但界面的想法很好。然后我可以将自定义属性应用到界面吗?
    • 是的,您可以在接口和接口的属性上应用属性。
    • 如果类型不密封,这绝对是要走的路。
    【解决方案2】:

    您可以创建自己的 ModelMetadataProvider 并让它从其他来源查找元数据。

    在这里查看抽象类:http://msdn.microsoft.com/en-us/library/system.web.mvc.modelmetadataprovider.aspx

    默认提供程序使用 DataAnnotations,但您也可以轻松编写一个查看 SQL 数据库或 XML 文件或类似文件的提供程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2016-06-12
      • 2010-11-11
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多