У меня есть простой валидатор, который должен проверить неправильный формат даты. Я делаю тестирование и вхожу 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;
}
Должна dateCheck быть строкой вместо DateTime?
Если допустимы только даты > год 1900, вы можете попробовать:
if (DateTime.TryParse(dateCheck, out select) && dateCheck > default(DateTime))
e.IsValid = true;
else
e.IsValid = false;
и это может удовлетворить вашим требованиям.
Как неуправляемый год менее важен?
Тип значения 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...
}
Вы можете проверить длину строки строки, входящую в нее, прежде чем превращать ее в дату, вы можете разделить строку на/и проанализировать год, чтобы убедиться, что она действительна в вашем диапазоне, вы можете добавить вторичное условие, которое проверяет год перед TryParse.