Насколько я знаю Систему. ComponentModel. DataAnnotations. DataTypeAttribute не работает в проверке допустимости модели в MVC v1. Например,
public class Model
{
[DataType("EmailAddress")]
public string Email {get; set;}
}
В кодах выше, почтовое свойство не будет проверено в MVC v1. Это работает в MVC v2?
[DataType("EmailAddress")]
по умолчанию не влияет на валидацию. Вот IsValid
метод этого атрибута (из рефлектора):
public override bool IsValid(object value)
{
return true;
}
Вот пример пользовательского DataTypeAttribute для валидации Emails (взят с этого сайта http://davidhayden.com/blog/dave/archive/2009/08/12/CustomDataTypeAttributeValidationCustomDisplay. aspx):
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
public class EmailAddressAttribute : DataTypeAttribute
{
private readonly Regex regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.Compiled);
public EmailAddressAttribute() : base(DataType.EmailAddress)
{
}
public override bool IsValid(object value)
{
string str = Convert.ToString(value, CultureInfo.CurrentCulture);
if (string.IsNullOrEmpty(str))
return true;
Match match = regex.Match(str);
return ((match.Success && (match.Index == 0)) && (match.Length == str.Length));
}
}
Как отметил LukLed, DataTypeAttribute не делает никакой валидации по умолчанию. Но он влияет на шаблоны относительно того, как представляются данные.
Например, если вызвать метод Html.DisplayFor()
на модели, имеющей атрибут DataType(DataType.EmailAddress)
, то его значение будет отформатировано как {0}
(по крайней мере, в MVC RC2).
Прочтите сообщение в блоге Скотта Гатри о проверке MVC 2. Это превосходно. http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx