2009-05-11 46 views
5

Tôi đang buộc phải thu thập tất cả Thuộc tính tùy chỉnh được đặt trên Thuộc tính. Có nhiều hơn một thuộc tính cùng loại được gán cho tài sản, nhưng khi thu thập chúng, bộ sưu tập kết quả chỉ chứa các thuộc tính đầu tiên của loại hình cụ thể:AllowMultiple không hoạt động với Thuộc tính Thuộc tính?

Các thuộc tính lớp

[AttributeUsage(System.AttributeTargets.Property, 
       AllowMultiple = true)] 

public class ConditionAttribute : Attribute{...} 

Cách sử dụng:

[ConditionAttribute("Test1")] 
[ConditionAttribute("Test2")] 
[ConditionAttribute("Test3")] 
public Color BackColor{get; set;} 

Bây giờ khi vòng lặp qua tất cả Props của đối tượng 'giá trị' mà lớp chứa Prop "BackColor":

foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value)) 
{ 
    foreach (Attribute attribute in property.Attributes) 
    { ... } 
    .... 
} 

bộ sưu tập thuộc tính. Thuộc tính chỉ chứa MỘT Thuộc tính thuộc loại "ConditionAttribute": Thuộc tính có "Test1". Những người khác được bỏ qua ;-(

Vì vậy, không AllowMultiple không làm việc cho tài sản thuộc tính Cảm ơn?

trước

Henrik

Trả lời

0

Vâng, nó làm việc. Không chắc lý do tại sao nó không hoạt động qua PropertyDescriptors

Bạn luôn có thể làm:. Attribute.GetCustomAttributes(methodInfo, typeof(ConditionAttribute))

17

Theo a post on MSDN, i này s theo thiết kế như một phần của lớp PropertyDescriptor.

Tuy nhiên, bạn thực sự có thể giải quyết vấn đề bằng cách ghi đè typeid trong thuộc tính tùy chỉnh của bạn (Nhờ Ivan from Mindscape cho trỏ này ra):

public override object TypeId 
{ 
    get 
    { 
    return this; 
    } 
} 
+0

Tôi gặp phải sự cố tương tự trong khi sử dụng một ValidationAttribute tùy chỉnh trong MVC; điều này giải quyết được vấn đề của tôi. –

0

Một cách khác để tinh chỉnh này,

[ConditionAttribute (" Test1, Test2, Test3 ")] màu công cộng BackColor {get; set;}

và trong mã xác nhận của bạn,

lstProperties Dim() As String = _ChkColors.Split ("") Đối với mỗi strProp như chuỗi trong lstPropertyes 'xác nhận của bạn ' trở Tiếp

Các vấn đề liên quan