2011-01-19 14 views
5

Używałem atrybutu MetadataType do dodawania atrybutów sprawdzania poprawności do klas, które generuję przy użyciu szablonu T4. Działa to cudownie, ale chciałbym móc użyć atrybutu DefaultValue dla niektórych właściwości, tak aby moja klasa MetadataType bardziej opisała moje klasy (i nie będę musiała implementować metody OnCreated w tych klasach) . Mogę dodać atrybut do mojej klasy MetadataType, ale nie ma ona żadnego efektu.Używanie DefaultValueAttribute na klasie, która jest używana jako typ w MetadataTypeAttribute

Oto przykładowe źródło - wygenerowana część jest (oczywiście) w innym pliku. Jeśli utworzę obiekt widgetu, właściwość Name będzie pusta.

/// <summary> 
/// This part is generated 
/// </summary> 
public partial class Widget 
{ 
    public string Name { get; set; } 
} 

/// <summary> 
/// This part is hand-coded so I can add attributes, custom methods etc. 
/// </summary> 
[System.ComponentModel.DataAnnotations.MetadataType(typeof(WidgetMetadata))] 
public partial class Widget 
{ 
} 

/// <summary> 
/// This part is hand-coded, and any validation attributes I add work fine. 
/// </summary> 
public class WidgetMetadata 
{ 
     [System.ComponentModel.DefaultValue("Default Name")] 
     [StringLengthValidator(0, RangeBoundaryType.Inclusive, 320, RangeBoundaryType.Inclusive, Tag = "Invalid string length", MessageTemplate = "{1} must contain between \'{3}\' to \'{5}\' characters.")] 
     public string Name { get; set; } 
} 

Co robię źle ?, czy nie jest to obsługiwane (a jeśli tak jest to udokumentowane wszędzie?)

+2

Podaj minimalny przykład kodu źródłowego, który wykazuje opłacalne problemu. –

+0

Tak, nie sądziłem, że ktokolwiek to dostanie bez jakiegoś źródła. –

Odpowiedz

3

Dodaj do konstruktora klasy WidgetMetaData i ustawić wartość domyślną posesji. DefaultValueAttribute jest używany do Visual Studio Toolbox (jak sądzę), aby określić, czy wartość powinna być pogrubiona (zmieniona) czy nie (wartość domyślna), między innymi. Nadal musisz ustawić wartość właściwości w pewnym momencie.

public WidgetMetaData() 
{ 
    Name = "Default Value"; 
} 

Więcej informacji na DefaultValueAttribute: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute(v=vs.71).aspx

Powiązane problemy