基本上,如果我有一个对象集合,我如何将验证属性应用到集合中的每个项目(例如 MaxLengthAttribute
)?
public class Foo
{
public ICollection<string> Bars { get; set; }
}
例如,我如何确保 Bars 包含的字符串可验证最大长度为 256?
更新:
我了解如何将验证属性应用于单个属性,但问题是如何将其应用于集合中的对象。
public class Foo
{
[StringLength(256)] // This is obvious
public string Bar { get; set; }
// How do you apply the necessary attribute to each object in the collection!
public ICollection<string> Bars { get; set; }
}
最佳答案
我知道这个问题有点老了,但也许有人会来寻找答案。
我不知道将属性应用于集合项的通用方法,但对于特定的字符串长度示例,我使用了以下方法:
public class StringEnumerationLengthValidationAttribute : StringLengthAttribute
{
public StringEnumerationLengthValidationAttribute(int maximumLength)
: base(maximumLength)
{ }
public override bool RequiresValidationContext { get { return true; } }
public override bool IsValid(object value)
{ return false; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var e1 = value as IEnumerable<string>;
if (e1 != null) return IsEnumerationValid(e1, validationContext);
return ValidationResult.Success; // what if applied to something else than IEnumerable<string> or it is null?
}
protected ValidationResult IsEnumerationValid(IEnumerable<string> coll, ValidationContext validationContext)
{
foreach (var item in coll)
{
// utilize the actual StringLengthAttribute to validate the items
if (!base.IsValid(item) || (MinimumLength > 0 && item == null))
{
return new ValidationResult(base.FormatErrorMessage(validationContext.DisplayName));
}
}
return ValidationResult.Success;
}
}
申请如下,要求每个收藏品4-10个字符:
[StringEnumerationLengthValidation(10, MinimumLength=4)]
public ICollection<string> Sample { get; set; }
关于c# - 如何将验证属性应用于集合中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097474/