我有一个对象,其中包含使用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属性及其参数来操作“Name”。例如:
///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;
}
}
}
“length”的值是null,而不是54.如何获取值? 希望这是有道理的,谢谢。
A
答案 0 :(得分:1)
这适用于我,您是否获得了您认为属于的StringLengthValidator
属性? (这是您的自定义类还是来自Enterprise Lib的那个?
就我而言,我创建了一个自定义类StringLengthValidator
答案 1 :(得分:0)
这一切背后的想法是价值54可以改变,对吧?否则你可以硬编码54。
看看如何使用标记在web.config中控制验证,以便将54添加到web.config并从应用程序中读取
Here就是一个例子,请寻找第一种方法Rule sets in Configuration
答案 2 :(得分:0)
当我今天和同事一起寻找它时,我们没有找到解决问题的合适方法,这就是下一个遇到麻烦的人的答案。
属性名称为StringLengthValidator
,但是如果您检查类名称为StringLengthValidatorAttribute
,则为了获取正确的属性,您需要调用函数GetCustomAttributes
this方式:
property.GetCustomAttributes(typeof(StringLengthValidatorAttribute), false)
这将正确获取属性,然后您将能够获得UpperBound
的值