Как мне остановить валидатор DateTime от заполнения?

2

У меня есть простой валидатор, который должен проверить неправильный формат даты. Я делаю тестирование и вхожу 2/14/201... который проходит через мой валидатор как 2/14/0201. Как предотвратить это и перейти к e.IsValid = false;?

protected void rangeVal(object sender, ServerValidateEventArgs e)
{
    DateTime dateCheck = txtDate1.Text.Trim();
    DateTime select;
    if (DateTime.TryParse(dateCheck, out select))
        e.IsValid = true;
    else
        e.IsValid = false;
}
Теги:

3 ответа

3
Лучший ответ

Должна dateCheck быть строкой вместо DateTime?

Если допустимы только даты > год 1900, вы можете попробовать:

if (DateTime.TryParse(dateCheck, out select) && dateCheck > default(DateTime))
    e.IsValid = true;
else
    e.IsValid = false;

и это может удовлетворить вашим требованиям.

0

Как неуправляемый год менее важен?

От Структура DateTime MSDN:

Тип значения DateTime представляет даты и время со значениями с 12:00:00 полночь, 1 января, 0001 Anno Domini (Common Era) через 11:59:59 P.M., 31 декабря 9999 A.D. (C.E.)

Вы должны попробовать что-то вроде этого:

protected void rangeVal(object sender, ServerValidateEventArgs e)
{
    DateTime dateCheck = txtDate1.Text.Trim();
    DateTime select;
    if (DateTime.TryParse(dateCheck, out select))
    {
        e.IsValid = IsDateTimeValidForMyApplication(select);
    }
    else
        e.IsValid = false;
}

bool IsDateTimeValidForMyApplication(DateTime dt)
{
    return dt.Year > 2000;   //or whatever business rules your app has...
}
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню