Проверка на стороне клиента не работает для скрытого поля в asp.net MVC 3 - PullRequest
9 голосов
/ 17 октября 2011

У меня есть скрытое поле с проверкой для него, как показано ниже

@Html.HiddenFor(m => m.Rating)
@Html.ValidationMessageFor(m => m.Rating)

Свойство Rating имеет Range атрибут валидатора, примененный с диапазоном 1-5.Это помещается в форму с кнопкой отправки.

Затем я получил следующий jquery, который устанавливает значение в скрытом поле для какого-либо пользовательского события (в основном пользователь нажимает на некоторые звезды, чтобы оценить)

$(".star").click(function(){
    $("#Rating").val(2);
});

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

Теперь, в этой ситуации, если я нажимаю на звездочку, которая вызывает вышеуказанный javascript и устанавливает скрытое поле, сообщение об ошибке проверки не исчезнет,Я могу отправить форму после того, как скрытая переменная имеет какое-то допустимое значение.Но я ожидаю, что проверка на стороне клиента должна работать.(Когда скрытой переменной было присвоено какое-то допустимое значение, ошибка проверки должна исчезнуть)

Сначала я думал, что проверка jquery будет вызываться для некоторых специальных событий, поэтому я попытался поднять click, change, keyup,События размытия и фокусировки, как показано ниже

$(".star").click(function(){
    $("#Rating").val(2);
    $("#Rating").change();
});

Но это все еще не работает.Сообщения об ошибках, однажды появившиеся, вообще не исчезают.

Ответы [ 5 ]

5 голосов
/ 18 декабря 2013

Это оказалось очень интересным вопросом. настройка по умолчанию "ignore" игнорирует скрытые поля. Поле было скрыто в плагине jQuery ui. Я просто добавил класс с именем "includeCheckBox" к отображаемому вводу, который я хотел проверить, и поместил следующую строку кода в ...

var validator = $('#formMyPita').validate();
validator.settings.ignore = ':hidden:not(".includeCheckBox")';
if ($('#formMyPita').valid()) {....
5 голосов
/ 22 июля 2013

Проверка на стороне клиента игнорирует скрытые поля.Вы можете установить опцию «игнорировать» динамически, но чтобы заставить ее работать, я сделал следующее непосредственно в файле .js.

На данный момент это должно сработать.

В моем aspx...

<%: Html.HiddenFor(model => model.age, new { @class="formValidator" }) %>

В jquery.validate.js

ignore: ":hidden:not('.formValidator')",
5 голосов
/ 14 ноября 2011

Вы можете обернуть свое скрытое поле дивом, помещенным куда-то, но все еще внутри <form>.Добавьте css, чтобы выбросить его в космос.

<div style="position:absolute; top:-9999px; left:-9999px">
<input id="Rating" type="hidden" name="rating" >
</div>

Затем добавьте следующую метку туда, где вы хотите показать ошибку:

<label for="rating" class="error" style="display:none">I am an an error message, please modify me.</label>
2 голосов
/ 17 октября 2011

В коде, который устанавливает значение скрытого поля, вручную вызовите проверку формы, например:

$("form").validate().form();
1 голос
/ 17 октября 2011

Я думаю, это потому, что скрытые входы не запускают ни одно из этих событий.

Вместо этого вы могли бы использовать <input type="text" style="display:none" /> вместо скрытого поля;

@html.TextBoxFor(m => m.Rating, new {display = "display:none"})
...