Mit Hilfe der Default auf einer Klasse, die als Typ in einem MetadataTypeAttribute verwendet wird

StackOverflow https://stackoverflow.com/questions/4741909

  •  12-10-2019
  •  | 
  •  

Frage

Ich habe das MetadataType Attribut wurde unter Verwendung von Validierungs Attribute Klassen hinzufügen Ich bin Erzeugung einer T4-Vorlage. Das funktioniert wunderbar, aber ich möchte in der Lage sein, das Defaultattribut auf einigen Eigenschaften zu verwenden, so dass meine MetadataType Klasse wird mehr vollständig meine Klassen beschreiben (und so, dass ich nicht die OnCreated Methode in diesen Klassen implementieren muß) . Ich kann das Attribut auf meine MetadataType Klasse hinzufügen, aber es hat keine Wirkung.

Hier einige Beispielquelle - das erzeugte Teil (natürlich) ist in einer anderen Datei. Wenn ich ein Widget-Objekt instanziiert, wird die Name-Eigenschaft null sein.

/// <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; }
}

Was mache ich falsch ?, oder ist dies nicht unterstützt (und wenn ja, ist es dokumentiert überall?)

War es hilfreich?

Lösung

einen Konstruktor der WidgetMetaData Klasse hinzufügen und den Standardwert der Eigenschaft es ist gesetzt. Die DefaultValueAttribute ist für das Visual Studio Toolbox (glaube ich), um zu bestimmen, ob der Wert fett sein sollte (geändert) oder nicht (Standardwert), unter anderem. Sie müssen noch den Wert der Immobilie zu einem bestimmten Zeitpunkt setzen.

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

Weitere Informationen über die DefaultValueAttribute: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute (v = vs.71) aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top