2

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

考虑以下对象:

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

我希望能够根据 StringLengthValidator 属性及其参数来操作“名称”。例如:

///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。我怎样才能得到这个值?希望这是有道理的,谢谢。

一种

4

3 回答 3

1

这对我有用,您是否获得了与StringLengthValidator您认为的相同的属性?(这是您的自定义类还是 Enterprise Lib 中的类?

就我而言,我创建了一个自定义类StringLengthValidator

在此处输入图像描述

于 2012-10-12T08:42:30.987 回答
0

这一切背后的想法是值 54 可以更改,对吗?否则你只能硬编码 54。

看看如何使用标签控制 web.config 中的验证,以便您可以将 54 添加到 web.config 并从您的应用程序中读取它

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

于 2012-10-12T08:39:08.647 回答
0

当我今天和我的同事一起寻找它时,我们没有找到解决问题的合适方法,这里是下一个遇到麻烦的人的答案。

属性名是StringLengthValidator,但是如果你检查类名它是StringLengthValidatorAttribute,所以为了得到正确的属性,你需要这样调用函数GetCustomAttributes

property.GetCustomAttributes(typeof(StringLengthValidatorAttribute), false)

这将正确获取属性,然后您将能够获得UpperBound

于 2019-06-26T11:16:17.563 回答