6

Ich habe folgende UIHint Basis attibute:Wie finde ich die Zieleigenschaft eines UIHInt-Attributs?

[AttributeUsage(AttributeTargets.Property)] 
public class DropDownListAttribute : UIHintAttribute, IMetadataAware 
{ 
    public DropDownListAttribute(string selectListName) 
     : base(KnownUiHints.DropDown, KnownPresentationLayers.Mvc, selectListName) 
    { 
     SelectListName = selectListName; 
    } 

    public string SelectListName { get; set; } 

    public void OnMetadataCreated(ModelMetadata metadata) 
    { 
     metadata.AdditionalValues[KnowMetadataKeys.SelectListName] = SelectListName; 
    } 
} 

Es ist Zweck ist es, eine Select auf einen einzigen Wert View-Modell-Eigenschaft zuweisen aus einer Liste, wie folgt ausgewählt werden:

public class DemoModel: ViewModel 
{ 
    [Required] 
    [DropDownList("LanguageSelect")] 
    [Display(Name = "Language")] 
    public int? LanguageId { get; set; } 

    public SelectList LanguageSelect { get; set; } 
} 

Ich habe Dies funktioniert jetzt mit einigen sehr Golbergian Maschinen und meinem eigenen Metadaten-Provider, aber nachdem ich entdeckt habe, fühle ich, dass ich das vereinfachen kann. Jetzt füge ich die SelectListName zu den Metadaten hinzu, und spring dann durch einige Ringe zu a) Holen Sie die SelectList in eine Art globales Wörterbuch, und b) holen Sie die Auswahlliste aus diesem Wörterbuch heraus, wenn Sie die Dropdownliste rendern.

Ich möchte die SelectList selbst den Modellmetadaten im Attribut hinzufügen, d. H. Metadaten, die für die Eigenschaft lokal sind, auf die sich das Attribut bezieht, aber wie kann ich auf diese Eigenschaft zugreifen oder sie enthält Typ?

+0

welche Htmlhelper Methode werden Sie in Ihrer Ansicht zur Ausgabe der Liste mit? – MarkG

Antwort

0

Beispielcode für den Zugriff auf Attribute auf Pocos. Es gibt eine einzelne oder Multi-Attribut-Version betrachten

Probe Aufruf der Methode

var MutliAttributeList = MyStatic.GetPocoMultiAttribute<MyAttribute>(typeof(poco),"AttrName"); 


public static UAttribute GetPocoAttribute<TPoco, UAttribute>(string attributeName) { 
     var result = typeof (TPoco).GetCustomAttributes(true) 
            .Where(attribute => attribute.GetType() 
                   .Name == attributeName) 
            .Cast<UAttribute>() 
            .FirstOrDefault(); 
     return result; 
    } 

public static IEnumerable<UAttribute> GetPocoMultiAttribute<UAttribute>(Type pocoType, string attributeName) { 
     var result = pocoType.GetCustomAttributes(true) 
          .Where(attribute => attribute.GetType() 
                  .Name == attributeName).Cast<UAttribute>().ToList(); 
     return result; 
    } 
Verwandte Themen