2017-10-16 88 views
1

考慮到我有:我可以用StringLengthAttribute以編程方式測試一個屬性來檢查它是否有效嗎?

[StringLength(10)] 
public string Bibble {get; set;} 

我可以單獨檢查,看看是否比博是有效的?

我認爲:

PropertyInfo[] props = typeof(MyBibbleObject).GetProperties(); 
foreach (PropertyInfo prop in props) 
{ 
    object[] attrs = prop.GetCustomAttributes(true); 
    foreach (object attr in attrs) 
    { 
     StringLengthAttribute stringLengthAttribute = attr as StringLengthAttribute; 
     if (stringLengthAttribute != null) 
     { 
      string propName = prop.Name; 

// Could be IsValid? 
      stringLengthAttribute.IsValid() 


     } 
    } 
} 

但是IsValid的方法需要一個對象,我沒想到。我想知道是否有更好的方法來確定它是否有效。我必須在每個物業的基礎上做。

+0

正確,你傳入你想測試的值。 – Igor

+0

在您當前的情況下,您無法訪問ModelState? – GGO

+0

我擔心a)它需要一個值,以及b)當它無法訪問屬性本身的元數據作爲普通屬性時它是否能夠處理數組和各種數據類型 – NibblyPig

回答

2

您可以使用內置的Validator類。它的用法有些模糊,但仍然如下:

// instance is your MyBibbleObject object 
var ctx = new ValidationContext(instance); 
// property to validate 
ctx.MemberName = "Bibble"; 
// this will store results of validation. If empty - all fine 
var results = new List<ValidationResult>(); 
// pass value to validate (it won't take it from your object) 
Validator.TryValidateProperty(instance.Bibble, ctx, results); 
相關問題