Прежде чем я начну ... Я не могу легко перенести проект в MVC3. Зв
У меня проблема в том, что я определил пользовательский атрибут валидатора для проверки максимальной и минимальной длины строкового свойства, StringLengthInRangeAttribute .
Когда контроллер вызывает ModelState.IsValid , в списке Пассажиры только проверка свойства Date выбрасывает недопустимое значение, если ничего не было предоставлено. Я предполагаю, что это означает, что моя проблема не в пользовательском валидаторе, а во всей валидации?
Обновление (дополнительная информация для ясности):
У меня есть два симптома этой проблемы:
1. Обязательный валидатор для строк не срабатывает, когда они пусты
и
2. Мой пользовательский валидатор никогда не вызывается (установленная точка останова никогда не срабатывает).
Модель:
public class Passenger
{
[Required(ErrorMessageResourceType = typeof(Resources.Messages.Passenger),
ErrorMessageResourceName = "RequireNumber")]
public int Number { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources.Messages.Passenger),
ErrorMessageResourceName = "RequireSurname")]
[StringLengthInRange(MinLength = 2, MaxLength = 30, ErrorMessageResourceType = typeof(Resources.Messages.Passenger),
ErrorMessageResourceName = "MaxLengthSurname")]
public string Surname { get; set; }
}
Пользовательский валидатор:
public class StringLengthInRangeAttribute:ValidationAttribute
{
public int MinLength { get; set; }
public int MaxLength { get; set; }
public override bool IsValid(object value)
{
if (((string)value).Length < MinLength)
{
return false;
}
if (((string)value).Length > MaxLength)
{
return false;
}
return true;
}
}
Действие контроллера:
public ViewResult TailorHoliday(List<SearchAndBook.Models.ViewModels.Passenger> passengers,
int leadPassengerIndex)
{
if(!ModelState.IsValid)
{
return View("PassengerDetails", GetBookingState(_currentSession));
}
//...
return View();
}
Любой совет приветствуется. Это первый раз, когда я использую аннотации данных, поэтому я вполне готов чувствовать себя глупо, что что-то упустил!