2012-04-16 6 views
5

Ich habe eine automatisch generierte Klasse von einem Web-Service zu importieren so etwas wie diese, die (abgekürzt):Wie kann ich Attribute für eine Eigenschaft verwenden, die in der anderen Hälfte einer partiellen Klasse definiert ist?

[System.Runtime.Serialization.DataMemberAttribute()] 
public System.DateTime StartDate 
{ 
    get 
    { 
     return this.StartDateField; 
    } 
    set { /* implementation prop changed */ } 
} 

Und ich möchte dieses Mitglied ein MVC-Format Attribut hinzufügen. So in einer anderen Datei die gleiche partial class Definition enthält, würde Ich mag so etwas wie die folgenden tun (was illegal ist):

[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
public DateTime StartDate; 

Eine partielle Methode ist hier nicht von Nutzen, da teilweise Methoden privat sein muss, haben nichtig Rückkehr Typ, muss eine Methode usw. sein usw.

Wie kann ich dieses Mitglied dekorieren?

+0

Ist der zweite Code soll Snippet die 'StartDateField' durch die' StartDate' Eigenschaft in Ihrem ersten Schnipsel verwendet werden zu definieren? –

+0

Anstatt Teilklassen zu verwenden, um Ihren generierten Code zu dekorieren, sollten Sie das Attribut 'MetadataType' mit einer anderen Klasse verwenden, die die generierte Klasse spiegelt. ([Verwandte Frage] (http://stackoverflow.com/questions/2999936/using-dataannotations-with-entity-framework)) –

+0

@ M.Babcock: Nein, das zweite Snippet ist in einer Teilklasse mit dem gleichen Namen wie Der Erste. Es ist üblich, Erweiterungen zu automatisch generierten Klassen auf diese Weise hinzuzufügen, aber normalerweise fügen Sie nur Eigenschaften/Methoden hinzu, die Sie nicht neu definieren (afaik, Sie können nicht). – Abel

Antwort

10

Sie könnten MetadataType Attribut wie folgt verwenden:

[MetadataType(typeof(MyClass_Validation))]  
public partial class MyClass 
{} 

public class MyClass_Validation  
{  
    [DisplayFormat(...)] 
    public DateTime StartDate { get; set; } 
} 
+0

Willst du sagen, dass die Verwendung von MetadataType den Compiler zwingt, die Attribute ähnlicher Signaturen zu den entsprechenden Signaturen in der partiellen Klasse hinzuzufügen? Klingt toll wenn das klappt. – Abel

+0

Ja, verwenden Sie das Attribut 'MetadataType', um einen Typ zu definieren, der beispielsweise Attribute für die automatisch generierte Klasse enthält. Es ist auch eine gute Übung, Validierungsattribute in einer anderen Klasse anzugeben. – ionden

+0

@Abel - Ja, das wurde speziell für diesen Fall entwickelt. Und das Spiel ist auf Name, nicht auf Unterschrift. –