У меня проблемы с пользовательской проверкой в asp.net mvc 3.0
Что я хочу к этому сделать.
- Быть установленным для свойства (сейчас я могу только выяснить, как сделать это в классе)
- Будьте достаточно умны, чтобы понять, что используется несколько экземпляров.
Сценарий
- textbox (id = "textbox1")
- выпадающий список (id = "ddl1")
- textbox (id = "textbox2")
4 выпадающий список (id = "ddl2")
значения в выпадающем списке одинаковы. («Дни» и «Минуты»)
Теперь пользователь вводит текстовое поле 30 и выбирает «дни» в ddl1. Затем он печатает в textbox2 10000 и "days" в ddl2. Первый действителен, второй недействителен, поскольку в году всего 365 дней.
Сценарий 2
Пользователь вводит в texbox1 99 и выбирает «минуты» в ddl1. Это, конечно, неверно и должно провалиться.
Так что может быть любая комбинация того, где они могут выбрать правильный день и недопустимое минутное время.
Или оба могут быть действительными
Итак, у меня есть это пока
Моя модель представления
[ReminderFormat(ErrorMessage = "test")]
public class ReminderViewModel
{
public List<SelectListItem> DurationTypes { get; set; }
public DurationTypes SelectedDurationType { get; set; }
public string ReminderLength { get; set; }
}
Это будет в списке моделей просмотра и генерирует количество нужных мне
List<ReminderViewModel> viewModel = new List<ReminderViewModel>()
// add ReminderviewModel to this collection
View
// do a for loop through the viewModel ( List<ReminderViewModel> )
// generate a textbox html box and drop down list for each one
аннотация данных
// set attribute to class for now but I want it on a property but I can't
// figure out how to get SelectedDurationType and pass it in. if I have my attribute on ReminderLength
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class ReminderFormatAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var reminderViewModel = (ReminderViewModel)value;
switch (reminderViewModel.SelectedDurationType)
{
case DurationTypes.Days:
int length = Convert.ToInt32(reminderViewModel.ReminderLength);
if (length > 30)
{
return false;
}
else
{
return true;
}
default:
throw new ArgumentOutOfRangeException();
}
}
Задача 1
Итак, как вы можете видеть, у меня есть аннотация к классу, и я предпочитаю иметь ее в свойстве ReminderLength.
Задача 2
Прямо сейчас у меня просто дни в 30, так что меньше набирать (я изменю это позже). Проблема, которую я сейчас нахожу, состоит в том, что если textbox1 содержит 31, это не пройдет мою проверку.
Это правильно. Но если у меня есть textbox2, значение которого равно 1, оно пройдет проверку. Это тоже правильно.
Что не правильно, так это то, что он переопределит первую недействительную проверку. Так что теперь он думает, что все проверки пройдены и входит в мой метод действия. Когда он должен отклонить его и вернуться к представлению и сообщить пользователю, что textbox1 не прошел проверку.