Проверка DataTypeAttribute работает в MVC2?

Насколько я знаю Систему. ComponentModel. DataAnnotations. DataTypeAttribute не работает в проверке допустимости модели в MVC v1. Например,

public class Model
{
  [DataType("EmailAddress")]
  public string Email {get; set;}
}

В кодах выше, почтовое свойство не будет проверено в MVC v1. Это работает в MVC v2?

21
задан abatishchev 23 July 2013 в 04:58
поделиться

3 ответа

[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));
    }
}
36
ответ дан 29 November 2019 в 06:38
поделиться

Как отметил LukLed, DataTypeAttribute не делает никакой валидации по умолчанию. Но он влияет на шаблоны относительно того, как представляются данные.

Например, если вызвать метод Html.DisplayFor() на модели, имеющей атрибут DataType(DataType.EmailAddress), то его значение будет отформатировано как {0} (по крайней мере, в MVC RC2).

13
ответ дан 29 November 2019 в 06:38
поделиться

Прочтите сообщение в блоге Скотта Гатри о проверке MVC 2. Это превосходно. http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

1
ответ дан 29 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: