PhoneNumber プロパティと Email プロパティの両方を持つ顧客クラスがあります。DataAnnotations を使用すると、プロパティを DataType 検証属性で装飾できますが、それが何を意味するのかわかりません。
例えば:
[DataType(DataType.PhoneNumber)]
public string PhoneNumber {get; set;}
このプロパティに「1515999A」を割り当てた単体テストがあります。検証ランナーをステップ実行すると、値は電話番号に対して有効であると見なされます。私はこれが無効であるべきだと思っていたでしょう。
私はいくつかをグーグルで検索しましたが、列挙されたさまざまな 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)));
}