2012-10-12 92 views
1

我有一个对象,它具有用Validation属性装饰的属性。我的验证工作正常,但是我需要一个额外的方法来执行基于这些属性的字符串操作。从对象读取验证属性

考虑以下对象:立足StringLengthValidator属性和参数

public class Pupil 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    public Pupil() 
    { 

    } 

    [NotNullValidator] 
    [StringLengthValidator(0, 54, MessageTemplate = "Invalid value '{0}' for {1}, Max length: {5}")] 
    public string Name{ get; set; } 

    [NotNullValidator] 
    [StringLengthValidator(0, 2, MessageTemplate = "Invalid value '{0}' for {1}, Max length: {5}")] 
    public string Gender{ get; set; } 
} 

我希望能够操纵“名称”。例如:

///Takes a Pupil object in 
public static void DoManipulation(object value) 
    { 
     foreach(var property in value.GetType().GetProperties()) 
     { 
      if(property.Name == "Name") 
      { 
       var att = property.GetCustomAttributes(typeof(StringLengthValidator), false); 
       var length = ((StringLengthValidator)att[0]).UpperBound; 

      }    
     } 
    } 

“长度”的值为空,而不是54.我如何获得该值? 希望这是有道理的,谢谢。

A

+0

工作在ASP.NET MVC? –

+0

确定长度为空?这是一个整数属性,所以我非常怀疑它。你确定它已经达到了设定长度的点吗? –

回答

1

这适用于我,你是否得到相同的StringLengthValidator属性,你认为你是? (这是你的自定义类或企业库?

了一个在我的情况,我创建了一个自定义类StringLengthValidator

enter image description here

+0

我正在使用企业库中的一个。 – Adrian

+0

我不知道为什么这不起作用,但如果我使用自定义属性,那么它工作正常。在这种情况下,自定义属性对我来说效果更好,所以这就是建议。 – Adrian

0

所有这一切背后的想法是值54可以改变,对吧?否则,你可能只是硬编码54.

采取如何在web.config与标签控逆变验证,因此您可以将54添加到Web.config,并从你的应用程序读取它一看

Here是一个例子,寻找第一种方法,Rule sets in Configuration

+0

@Justin“att”的值为空,因此“length”返回indexOutOfBounds异常 Diego,上面的对象只有2个属性,但我的实际对象有6个复杂类型,每个属性都具有更复杂的属性,所以我愿意可以动态地做,而不是写一个大的配置文件。 – Adrian