6

Mam następujący UIHInt oparciu attibute:Jak znaleźć właściwość docelową atrybutu UIHInt?

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

Jego celem jest przypisanie SelectList do nieruchomości pojedyncza wartość widok modelu należy wybrać z listy, tak:

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

    public SelectList LanguageSelect { get; set; } 
} 

mam działa to teraz z kilkoma maszynami Golbergowskimi i moim dostawcą metadanych, ale po odkryciu IMetadataAware.OnMetadataCreated, czuję, że mogę to uprościć. Teraz dodam do metadanych SelectListName, a następnie przeskoczę przez kilka kółek do a) Pobierz listę SelectList do globalnego słownika i b) uzyskaj listę wyboru z tego słownika podczas renderowania listy rozwijanej.

Chciałbym dodać samą SelectList do metadanych modelu w atrybucie, tj. Metadane lokalne do właściwości, której dotyczy atrybut, ale jak uzyskać dostęp do tej właściwości lub jej typu?

+0

jaka metoda HtmlHelper używasz w celu wyprowadzenia liście? – MarkG

Odpowiedz

0

Przykładowy kod dostępu do atrybutów w Pocos. Istnieje jeden lub Multi wersja atrybut patrzeć

próbki wywołanie metody

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; 
    } 
Powiązane problemy