Динамическое изменение проверки ASP.NET MVC в Jquery

В одном из полей модели представления я установил минимальную длину в атрибуте аннотации данных ASP.NET MVC.

[MinLength(5, ErrorMessage = "A minimum of 5 digits is required")]

На основе раскрывающегося списка (который имеет 2 значения) MinLength необходимо обновить до 10. ClientSideValidation включен, поэтому проверка должна отражать изменения, прежде чем они будут отправлены обратно в контроллер.

Попытался изменить атрибут «data-val-minlength-min» с помощью jQuery на основе выпадающего значения, но проверка не изменилась.

Любые предложения, пожалуйста.


person Sumesh Kuttan    schedule 06.01.2017    source источник
comment
Атрибут данных html5 для проверки ТОЛЬКО для проверки на стороне клиента. Атрибут MinLength используется для проверки на стороне сервера (и для создания атрибута данных html5).   -  person ADreNaLiNe-DJ    schedule 06.01.2017
comment
@ ADreNaLiNe-DJ, как мне обновить его до другого значения при изменении раскрывающегося списка.   -  person Sumesh Kuttan    schedule 06.01.2017
comment
Попробуйте создать настраиваемый атрибут, унаследовав MinLength, где переданное значение является значением по умолчанию, и когда ваш настраиваемый атрибут вызывается проверкой на стороне сервера, вы просматриваете HTTP-запрос, чтобы получить значение, возвращаемое раскрывающимся списком. Я не знаю, работает ли это, но я бы попробовал, если бы у меня была такая необходимость.   -  person ADreNaLiNe-DJ    schedule 06.01.2017
comment
@ ADreNaLiNe-DJ, у меня проблемы с этим, потому что изменение раскрывающегося списка не выполняет никаких действий на сервере. Также основная причина в том, что кнопка отправки не позволяет мне отправить на сервер, так как включена проверка на стороне клиента.   -  person Sumesh Kuttan    schedule 06.01.2017
comment
У меня вроде есть решение. Я сохранил аннотацию для MinLength такой же. [MinLength(5, ErrorMessage = Требуется минимум 5 цифр)] В jQuery при изменении раскрывающегося списка свойство проверки обновляется до требуемого значения путем доступа к свойству: $('#formName).validate().settings.rules[ Комментарий].minlength. Также обновил сообщение проверки, обратившись к свойству: $('#formName').validate().settings.messages[Comment].minlength   -  person Sumesh Kuttan    schedule 06.01.2017
comment
Приведенное выше решение работает для меня. Я не уверен, что это правильный способ сделать это. Если есть лучший, я буду более чем счастлив изменить свой код. Если его нет, я опубликую это как ответ через день или два.   -  person Sumesh Kuttan    schedule 06.01.2017
comment
Создайте свой собственный атрибут условной проверки, чтобы получить проверку как на стороне клиента, так и на стороне сервера — Полное руководство по проверке в ASP.NET MVC 3 — часть 2   -  person    schedule 07.01.2017
comment
@StephenMuecke, похоже, я искал это. Это выглядит довольно хорошо, даже несмотря на то, что нужно написать много кода, чтобы добиться чего-то простого. Как только я его запущу, я обновлю это как ответ.   -  person Sumesh Kuttan    schedule 09.01.2017


Ответы (2)


Попробуйте этот подход. Это должно использовать RemoteValidations для более чем одного поля в модели.

[Remote("CheckForSelectedDropDownLengthMethod","ControllerName",AdditionalFields="SelectedDropDownName",ErrorMessage="The length should be be 10 characters.")]

public class ControllerName: Controller
{
    public JsonResult CheckForSelectedDropDownLengthMethod(Model yourmodel)
        {
              // write your logic to validate the logic here ,
              // Get the selected value of the dropdown, and the field where you want to check the length.
        }
}

Пожалуйста, следуйте одному из примеров https://www.codeproject.com/Tips/669824/Implementing-Remote-Validation-in-MVC

person Hari Gillala    schedule 06.01.2017
comment
Этот, как следует из названия, выполняет проверку удаленно, поэтому на это требуется время. У меня также есть другие проверки в моей форме, и, поскольку ClientValidation включен, все остальные входные данные скоро проверяются. Это выглядит немного странно, когда только один из них занимает некоторое время. Я проголосовал за комментарий от @StephenMuecke. Это похоже на то, что мне нужно. Я уже на полпути через эту реализацию. - person Sumesh Kuttan; 09.01.2017

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

Создайте свой собственный атрибут условной проверки, чтобы получить проверку как на стороне клиента, так и на стороне сервера — Полное руководство по проверке в ASP.NET MVC 3 — часть 2

person Sumesh Kuttan    schedule 10.01.2017