2012-04-16 8 views
5

Mam wygenerowany automatycznie klasę z importem usługę internetową zawierającą coś takiego (w skrócie):Jak używać atrybutów dla właściwości zdefiniowanej w drugiej połowie częściowej klasy?

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

I chcę dodać atrybut formatu MVC do tego członka. Więc w innym pliku zawierającego tę samą partial class definicję, chciałbym zrobić coś jak następuje (co jest nielegalne):

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

Częściowa metoda jest bezużyteczna tutaj, ponieważ metody cząstkowych musi być prywatne, mają void powrót typ, musi to być metoda itp.

Jak mogę udekorować tego członka?

+0

jest drugi fragment kodu miało być zdefiniowanie 'StartDateField' używany przez' własności StartDate' w pierwszym fragmencie? –

+0

Zamiast używać klas częściowych do dekoracji wygenerowanego kodu, powinieneś używać atrybutu 'MetadataType' z inną klasą, która odzwierciedla wygenerowaną klasę. ([Powiązane pytanie] (http://stackoverflow.com/questions/2999936/using-dataannotations-with-entity-framework)) –

+0

@ M.Babcock: nie, drugi fragment jest w częściowej klasie o tej samej nazwie co pierwszy. Powszechne jest dodawanie rozszerzeń do klas automatycznie generowanych w ten sposób, ale zazwyczaj dodajesz tylko właściwości/metody, nie zmieniając ich na nowo (afaik, nie możesz). – Abel

Odpowiedz

10

Można użyć MetadataType atrybut tak:

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

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

Czy chcesz powiedzieć, że użycie MetadataType zmusza kompilator do dodania atrybutów podobnych podpisów do odpowiednich sygnatur w klasie częściowej? Brzmi świetnie, jeśli to działa. – Abel

+0

Tak, użyj atrybutu 'MetadataType', aby zdefiniować typ, który będzie na przykład zawierał atrybuty dla generowanej automatycznie klasy. Dobrą praktyką jest także określanie atrybutów sprawdzania poprawności w innej klasie. – ionden

+0

@Abel - Tak, zostało to specjalnie zaprojektowane dla tego przypadku. A mecz jest na imię, a nie na podpisie. –

Powiązane problemy