6

Tôi có UIHInt dựa attibute sau:Làm cách nào để tìm thuộc tính mục tiêu của thuộc tính 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; 
    } 
} 

Đó là mục đích là để gán một SelectList để sở hữu một mô hình quan điểm giá trị duy nhất được lựa chọn từ một danh sách, như thế này:

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

    public SelectList LanguageSelect { get; set; } 
} 

Tôi có điều này làm việc bây giờ với một số máy móc rất Golbergian và nhà cung cấp siêu dữ liệu của riêng tôi, nhưng đã phát hiện IMetadataAware.OnMetadataCreated, tôi cảm thấy tôi có thể đơn giản hóa điều này. Ngay bây giờ tôi thêm SelectListName vào siêu dữ liệu, và sau đó nhảy qua một số hoops để a) Lấy SelectList vào một loại từ điển toàn cầu, và b) lấy danh sách chọn ra khỏi từ điển đó khi hiển thị danh sách thả xuống.

Tôi muốn thêm chính sách SelectList vào siêu dữ liệu mô hình trong thuộc tính, ví dụ: siêu dữ liệu cục bộ cho thuộc tính mà thuộc tính áp dụng, nhưng làm cách nào để truy cập thuộc tính đó hoặc thuộc tính chứa loại?

+0

gì phương pháp HtmlHelper bạn đang sử dụng theo quan điểm của bạn để ra danh sách? – MarkG

Trả lời

0

Mã mẫu để truy cập các thuộc tính trên Pocos. Có một phiên bản thuộc tính đơn hoặc đa để nhìn vào

gọi mẫu để phương pháp

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; 
    } 
Các vấn đề liên quan