【发布时间】:2010-11-24 08:40:35
【问题描述】:
我有一个同时具有 PhoneNumber 和 Email 属性的客户类。使用 DataAnnotations,我可以使用 DataType 验证属性来装饰属性,但我看不到那是什么。
例如:
[DataType(DataType.PhoneNumber)]
public string PhoneNumber {get; set;}
我有一个将“1515999A”分配给此属性的单元测试。当我单步执行验证运行程序时,该值被认为对电话号码有效。我会认为这应该是无效的。
我在 Google 上搜索了一些,但找不到关于各种枚举 DataTypes 实际捕获的内容的体面解释。有没有值得参考的地方?
编辑:
这是我用于验证运行程序的内容...
public virtual XLValidationIssues ValidateAttributes<TEntity>(TEntity entity)
{
var validationIssues = new XLValidationIssues();
// Get list of properties from validationModel
var props = entity.GetType().GetProperties();
// Perform validation on each property
foreach (var prop in props)
ValidateProperty(validationIssues, entity, prop);
// Return the list
return validationIssues;
}
protected virtual void ValidateProperty<TEntity>(XLValidationIssues validationIssues, TEntity entity, PropertyInfo property)
{
// Get list of validator attributes
var validators = property.GetCustomAttributes(typeof(ValidationAttribute), true);
foreach (ValidationAttribute validator in validators)
ValidateValidator(validationIssues, entity, property, validator);
}
protected virtual void ValidateValidator<TEntity>(XLValidationIssues validationIssues, TEntity entity, PropertyInfo property, ValidationAttribute validator)
{
var value = property.GetValue(entity, null);
if (!validator.IsValid(value))
validationIssues.Add(new XLValidationIssue(property.Name, value, validator.FormatErrorMessage(property.Name, value)));
}
【问题讨论】:
-
这是在框架 3.5 还是 4.0 中?您使用的是哪个验证运行器?
-
好评。我正在使用 3.5,并且正在使用一个相当简单的自定义验证运行程序(发布上面的代码)。
标签: c# .net validation data-annotations