MVC: как включить проверку на стороне клиента на скрытые поля
@Scripts
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script>
@View
@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{
@Html.TextBoxFor(x => x.htmlText, new { style="display:none"})<br />
@Html.ValidationMessageFor(x => x.htmlText)
<div>
@Html.TextBoxFor(x => x.Uprop1)<br />
@Html.ValidationMessageFor(x => x.Uprop1)
</div>
<input type="submit" value-="Submit" onclick="abc()" />
}
ЧТО Я пробовал
- Заменено игнорировать: ": hidden", с игнорированием: "", внутри validate.js
-
var validateMeta = $('# form123'). validate(); validateMeta.settings.ignore = "";
-
$.validator.setDefaults({ignore: ""});
-
$.validator.setDefaults({ ignore: [] });
Ответы
Ответ 1
Я столкнулся с этой проблемой. На скрытом поле на странице хранился идентификатор пользователя, который был выбран из текстового поля автозаполнения. Этот идентификатор был проверен, чтобы гарантировать, что ненулевой идентификатор был отправлен назад. Мы хотели включить эту проверку на стороне клиента.
По умолчанию jQuery validate игнорирует скрытые поля, элементы с нулевой шириной и высотой, те, у которых css display: none и любые элементы с невидимым родителем (с использованием тех же критериев).
Однако параметр игнорирования можно переопределить, добавив следующий script (я просто добавил его в свой собственный валидатор script перед вызовом $.validator.addMethod()):
// By default validator ignores hidden fields.
// change the setting here to ignore nothing
$.validator.setDefaults({ ignore: null });
ПРИМЕЧАНИЕ. Этот код не будет работать, если он запускается внутри метода document ready
или jQuery $(function () {})
.
Ответ 2
Сразу после вставки script для проверки установите для параметра ignore значение "":
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
$.validator.setDefaults({
ignore: ""
});
</script>
}
Ответ 3
Я не уверен, почему вам нужно показывать подтверждения для полей, которые пользователь не может видеть или редактировать. Но вы можете попробовать это. Вместо display:none
примените visibility:hidden
и height:0
к полю ввода.
@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{
@Html.TextBoxFor(x => x.htmlText, new { style="visibility:hidden;height:0"})<br />
@Html.ValidationMessageFor(x => x.htmlText)
<div>
@Html.TextBoxFor(x => x.Uprop1)<br />
@Html.ValidationMessageFor(x => x.Uprop1)
</div>
<input type="submit" value-="Submit" onclick="abc()" />
}
Ответ 4
попробуйте
var validator = $("#form-id").data('validator');
validator.settings.ignore = "";