2011-12-15 3 views
1

Каков правильный способ проверить, имеет ли значение Combo значение с помощью правила C# FluentValidation Rulefor() для MVC3?FluentValidation Rulefor (... чтение COMBO)

У меня есть набор Дата рождения 3 Наримера

@Html.DatePickerDropDowns(Html.FieldNameFor(x => x.DateOfBirthDay), 
           Html.FieldNameFor(x => x.DateOfBirthMonth), 
           Html.FieldNameFor(x => x.DateOfBirthYear), 
           DateTime.Now.Year - 110, 
           DateTime.Now.Year, 
           Model.DateOfBirthDay, 
           Model.DateOfBirthMonth, 
           Model.DateOfBirthYear) 

    @Html.ValidationMessageFor(model => model.DateOfBirthDay) 
    @Html.ValidationMessageFor(model => model.DateOfBirthMonth) 
    @Html.ValidationMessageFor(model => model.DateOfBirthYear) 

Каждых из комбинированных дисплеев «ДЕНЬ» или «Месяц» или «Год»
и каждый из них имеет свой соответствующий список.

Поэтому я хотел бы проверить, выбрало ли пользователь одно из значений от 0..31.

RuleFor(x => x.DateOfBirthDay).NotEqual(0).WithMessage("Day is required"); 
    RuleFor(x => x.DateOfBirthMonth).NotEqual(0).WithMessage("Month is required"); 
    RuleFor(x => x.DateOfBirthYear).NotEqual(0).WithMessage("Year is required"); 

Например выход Combo DateOfBirthDay HTML выглядит следующим образом:

"0" - Day 
    "1" - 1 
    "2" - 2 
    ...till 31 

Когда я запустить ModelState.IsValid он не выбирает тот факт, что пользователь не трогали какие-либо из значений комбо, оставив индекс «0».

Спасибо в продвижении.

ответ

0

// Будет что-то вроде этой работы ..? Я предполагаю, что вы смотрите, если он равен «...»?

string somestring = new string('.',3); 
this.RuleFor(x => x.MyComboList).Equals(somestring); 

// или

this.RuleFor(x => x.MyComboList).NotEqual(0).WithMessage("..."); 
+0

Не совсем, первый элемент жестко закодирован и выглядит как «День». –

+0

Мне нужно посмотреть, что из ваших фактических inValid строк отсюда, почему бы не создать массив []. Если я вижу то, что у вас есть без «...», из того, что у вас есть, это выглядит как строчная кодированная строка. извините – MethodMan

+0

Обновлено ... спасибо в продвинутом –

3

Я не уверен, что "DatePickerDropdowns" есть, но FluentValidation имеет особую логику для этого случая. Используйте .NotEmpty() и вместо того, чтобы установить Day на 0, оставьте поле пустым. Используя Default DropDownListFor, вы должны установить параметр «День», и это произойдет автоматически.

Вы пишете помощник DatePickerDropDowns? Я бы не реализовал его таким образом. Я бы использовал один DateTime, а затем создал EditorTemplate, который создает 3 раскрывающихся списка для этого типа (если это единственный DateTime у вас есть, в противном случае используйте UIHint для указания настраиваемого шаблона).

+0

Это часть открытого исходного кода, которую я использую, но я могу просто изменить это на стандартный способ (как вы упомянули). Благодарю. –

Смежные вопросы