Пользовательский валидатор даты в asp.net mvc - PullRequest
0 голосов
/ 28 сентября 2011

У меня проблема ... У меня есть форма регистрации пользователя .. в этой форме у меня есть 3 поля, которые представляют день, месяц и год рождения. Мне нравится выделять 3 поля (3 меню). Как я могу создать валидатор, который позволяет мне проверить, если дата действительна? (не принимать даты вроде 30/02/2011) Я мог бы сделать это на JavaScript (на стороне клиента), но даже если бы я хотел иметь валидатор как обычно в model-vew-controller?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Вы можете привязывать валидаторы к классам вместо свойств.Я хотел бы сделать что-то вроде этого:

//The Model
[DateValidator]
public class Date
{
    public string Month { get; set; }
    public string Day { get; set; }
    public string Year { get; set; }
}

//The DataAnnotation
[AttributeUsage(AttributeTargets.Class)]
class DateValidatorAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var date = value as Date;
        Debug.Assert(date != null);

        var dateString = date.Month + date.Day + date.Year;
        DateTime dateTime;
        var isValid = DateTime.TryParseExact(dateString, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None,
                                             out dateTime);
        return isValid;
    }
}

Редактировать

DateTime.TryParseExact ДЕЙСТВИТЕЛЬНО проверяет действительность DateTime (то есть он вернет false, если вы попытаетесь проанализировать 30/02/2011).

0 голосов
/ 28 сентября 2011

Создайте компоновщик вашей модели, который будет получать эти 3 поля из контекста и полностью их проверять.

...