Существует ли хорошая ссылка для аннотирований данных в отношении того, как DataType работает?

Одно место, чтобы начать смотреть гну get_date lib , который может проанализировать примерно любой английская текстовая дата в метку времени. В то время как не точно, что Вы ищете, их решение подобной проблемы могло дать много полезных представлений.

7
задан Sailing Judo 1 September 2009 в 14:27
поделиться

3 ответа

Я не мог найти в Интернете много информации о DataType.PhoneNumber, но я нашел это:

http://forums.asp.net/p/1370546/2863383.aspx

В RTM-версии DataType.EmailAddress используется только для отметьте тип данных для себя use.

Я хотел узнать немного больше, поэтому я вытащил .NET Reflector от Red Gate и начал копаться.

Глядя на класс DataTypeAttribute, Джозеф Дейгл отлично подходит - каждый атрибут DataType не работает. сделать любую проверку; всегда возвращает истину (то есть «действителен»). Для некоторых типов данных выполняется пользовательское форматирование строки отображения. Телефонные номера, однако, практически не затрагиваются.

Итак, я рассмотрел возможные решения этой проблемы. Из того, что я нашел, этот выглядит лучше всего:

public class EvenNumberAttribute : ValidationAttribute
{
    public EvenNumberAttribute() : base(() => Resource1.EvenNumberError) { }
    public EvenNumberAttribute(string errorMessage) : base(() => errorMessage) { }

    protected override ValidationResult IsValid(object value, 
        ValidationContext validationContext)
    {
        if (value == null)
        {
            return ValidationResult.Success;
        }

        int convertedValue;
        try
        {
            convertedValue = Convert.ToInt32(value);
        }
        catch (FormatException)
        {
            return new ValidationResult(Resource1.ConversionError);
        }

        if (convertedValue % 2 == 0)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }
    }
}

Конечно, это проверяет, является ли число четным или нечетным. Вы можете написать собственный атрибут проверки для PhoneNumber, Email и т. Д., Который на самом деле выполняет проверку.

7
ответ дан 6 December 2019 в 23:11
поделиться

Атрибут DataTypeAttribute является атрибутом ValidationAttribute. Но он ВСЕГДА возвращает истину ... поэтому он не выполняет никакой реальной проверки.

(Я знаю, что это верно для 3.5, я не уверен, что это правда для 4.0)

1
ответ дан 6 December 2019 в 23:11
поделиться

Может это потому, что телефонные номера могут содержать буквы? wiki

0
ответ дан 6 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

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