ASP.Net MVC: разные типы условной проверки на стороне сервера и на стороне клиента

Я нахожусь в ситуации, когда мне нужно добиться битовой условной проверки на стороне сервера и на стороне клиента. история следующим образом

а) предположим, у меня есть одно раскрывающееся меню

б) два флажка,

c) один список радиокнопок

г) один список флажков

д) несколько текстовых полей и

е) кнопка сохранения

1) мое требование - когда пользователь выбирает одни данные из раскрывающегося списка и отправляет форму, тогда сообщение проверки будет отображаться для всех элементов управления, кроме двух флажков.

2) когда пользователь выбирает одни данные из раскрывающегося списка и выбирает один из флажков из 2 и отправляет форму, сообщение проверки будет отображаться для всех элементов управления, кроме списка флажков.

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

как использовать ValidationAttribute and IClientValidatable interface для достижения этой проверки на стороне клиента и сервера.

Благодарность


person Mou    schedule 24.03.2016    source источник
comment
Я думаю, что вы подходите к нему неправильно, хотя это может выглядеть как проверка, это не так ... После того, как пользователь выберет из первого раскрывающегося списка, можно проверить только первый раскрывающийся список. Вы не можете подтвердить то, что еще не произошло.   -  person stink    schedule 24.03.2016
comment
Если данные были выбраны из раскрывающегося списка, проверка не будет запускаться для раскрывающегося списка. Благодарность   -  person Mou    schedule 24.03.2016


Ответы (1)


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

Для серверной части в ActionMethod вы можете сделать что-то вроде этого:

' Check if any of the two CheckBoxes are not checked, then
  ModelState.Remove("CheckBox1")
  ModelState.Remove("CheckBox2")

' Else
  ModelState.Remove("CheckBoxList")

Для отключения ненавязчивой проверки на стороне клиента (см. https://stackoverflow.com/a/12179373/1361888),

 $(function() {
     var settngs = $.data($('form')[0], 'validator').settings;
     settngs.ignore = ".ignore";
 });

Таким образом, вы можете включить или отключить проверку полей как на стороне клиента, так и на стороне сервера. Это простой подход.

person Adnan Yaseen    schedule 24.03.2016
comment
что означает эта строка `ModelState.Remove (CheckBox1)?` - person Mou; 24.03.2016
comment
ModelState.Remove (CheckBox1) удалит проверку со стороны сервера для любого указанного вами поля. Каждая ошибка добавляется в словарь ModelState, поэтому вы просто удаляете проверку на стороне сервера для любого поля, которое хотите. Предоставленный мною код JS будет использоваться для игнорирования проверки на стороне клиента для любого поля, которое вы хотите. - person Adnan Yaseen; 24.03.2016
comment
на стороне клиента я не хочу игнорировать проверку, скорее я хочу проверять контроль на основе некоторого условия. - person Mou; 24.03.2016
comment
Пожалуйста, проверьте это. Это ответ на той же странице, которую я предоставил ранее для отключения проверки на стороне клиента. Вы можете использовать условия if для включения и отключения ненавязчивой проверки на стороне клиента в любом месте представления., stackoverflow.com/a/26717175/1361888 - person Adnan Yaseen; 24.03.2016
comment
Мое требование - некоторое время, когда проверка на стороне клиента не срабатывает для некоторых элементов управления на основе выбора данных из раскрывающегося списка. как этого добиться? - person Mou; 24.03.2016