Pas programmatisch aangepaste kenmerken toe op eigenschappen

Ik gebruik een API met bedrijfsobjecten waarbij ik geen toegang tot de code heb. Ik gebruik deze objecten rechtstreeks in mijn razorweergaven en wil in staat zijn om mijn aangepaste displayName-attributen toe te passen nadat het object of de objecten zijn geïnstantieerd.

Dus in plaats van dit:

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

Ik zou graag willen doen:

Profile.GivenName.DisplayName("FirstName");

Ik begrijp hoe het aangepaste kenmerk wordt gemaakt, maar ik heb problemen om ze programmatisch te maken.

Zodra ik dit kan doen, kan ik meer van mijn DataAnnotations toepassen.

1

2 antwoord

Waarom niet in plaats daarvan een klasse afleiden uit het bedrijfsobject en het gebruiken MetaDataType-kenmerk ?

[MetadataType(typeof(IMyAttributes))
public DerivedClass : BusinessClass
{
}

public interface IMyAttributes
{
  [Required]
  public string Name { get; set; }
}
2
toegevoegd
ja je kunt attributen toepassen op een interface en op eigenschappen van een interface.
toegevoegd de auteur Erik Philips, de bron
Dit is zeker de manier om te gaan als de typen niet verzegeld zijn.
toegevoegd de auteur Paul Tyng, de bron
Dit is een goed idee. Ik probeerde te voorkomen dat ik een extra laag creëerde, maar het interface-idee is goed. Ik zou dan aangepaste attributen kunnen toepassen op de interface?
toegevoegd de auteur Arnej65, de bron

U kunt uw eigen ModelMetadataProvider maken en deze metadata laten opzoeken uit een andere bron.

See the abstract class here: http://msdn.microsoft.com/en-us/library/system.web.mvc.modelmetadataprovider.aspx

De standaardprovider gebruikt DataAnnotations, maar u kunt er net zo gemakkelijk een schrijven die naar een SQL-database of XML-bestand of iets dergelijks kijkt.

0
toegevoegd