Отказ от ответственности : Это мое понимание того, что чтение исходного кода (не стесняйтесь меня поправлять)
( DataTypeAttribute )ValidationAttribute
(получено из ValidationAttribute
), и вам необходимо передать ему Enum (также называемый DataType
).
Атрибуты проверки необходимо переопределить IsValid
метод, который выполняется на привязке модели, и необходимо определить, является ли значение допустимым или нет.Вот как должен выглядеть пользовательский валидатор:
public class CustomValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// do some validation
if (/* validation passes */)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Validation message...");
}
}
}
Теперь, возвращаясь к DataTypeAttribue
(который является атрибутом валидации), вам нужно передать его DataType
enum:
public enum DataType
{
Custom = 0,
DateTime = 1,
Date = 2,
Time = 3,
Duration = 4,
PhoneNumber = 5,
Currency = 6,
Text = 7,
Html = 8,
MultilineText = 9,
EmailAddress = 10,
Password = 11,
Url = 12,
ImageUrl = 13,
CreditCard = 14,
PostalCode = 15,
Upload = 16
}
Из того, что я вижу, все, что DataTypeAttribtue
делает, это добавляет некоторое форматирование для DataType.Date
, DataType.Time
и DataType.Currency
... (также установите _dataTypeStrings
)
Более того, у вас есть атрибуты проверки, такие как EmailAddressAttribute , PhoneAttribute , UrlAttribute и т. Д., Которые получены из DataTypeAttribute
и выполняют дополнительную проверку для этих конкретных типов:
Теперь вот как вы можете использовать эти атрибуты проверки:
public class MyModel
{
[Phone] // <- executes the IsValid method of PhoneAttribute
public String Home { get; set; }
[DataType(DataType.PhoneNumber)] // <- does NOT execute IsValid method of PhoneAttribute
public String Mobile { get; set; }
[EmailAddress] // <- executes the IsValid method of EmailAddressAttribute
public String Email { get; set; }
[DataType(DataType.Currency)] // <- does the Currency formatting
public decimal Price { get; set; }
[DataType(DataType.Date)] // <- does the Date formatting
public DateTime ReleaseDate { get; set; }
[DataType(DataType.Text)] // <- does NOT add any validation/formatting
public string Name { get; set;}
/*
* this is the only scenario that I can think of, for using: [DataType(DataType.Text)]
*/
[DataType(DataType.Text)]
public object someKey { get; set;}
}
Опять же, насколько я понимаю, добавление [DataType(DataType.Text)]
к string
не добавляет никакого значения, иЛучше не использовать его, чтобы код был меньше, чище и легче для понимания ...