У меня есть скрытое поле в моей форме, которое является обязательным. Скрытое поле заполняется, когда пользователь выбирает значение из текстового поля с помощью автозаполнения пользовательского интерфейса jQuery. Я настроил свой валидатор формы, чтобы он не игнорировал скрытые поля, чтобы проверка действительно работала. Проверка работает, но когда пользователь выбирает нужную опцию из автозаполнения, которое затем заполняет скрытое поле, сообщение проверки не исчезнет и будет отображаться до тех пор, пока форма не будет опубликована. Нужно ли мне вручную вызывать $('form').validate()
или что-то еще после установки скрытого поля, или есть ли способ очистить это без дополнительного кода javascript?
Моя модель просмотра:
public class IndexViewModel
{
public string SchoolName { get; set; }
[Required]
public int SchoolId { get; set; }
}
Мой взгляд:
@model IndexViewModel
@using (Html.BeginForm())
{
<p>
@Html.LabelFor(m => m.SchoolName)
@Html.TextBoxFor(m => m.SchoolName)
@Html.HiddenFor(m => m.SchoolId)
@Html.ValidationMessageFor(m => m.SchoolId)
</p>
<p>
<input type="submit" />
</p>
}
@section scripts {
<script>
$(function () {
// stop validator from ignoring hidden fields
var validator = $('form').data('validator');
validator.settings.ignore = "";
// schoolname autocomplete
$('#SchoolName').autocomplete({
minLength: 1,
source: [
{ label: "ABC University", value: "1" },
{ label: "Oklahoma University", value: "2" },
{ label: "Texas University", value: "3" }
],
select: function (e, ui) {
e.preventDefault();
$('#SchoolId').val(ui.item.value);
$('#SchoolName').val(ui.item.label);
}
});
});
</script>
}
Заранее спасибо.
Изменить
Спарки, вот отрендеренный HTML:
<form action="/" method="post">
<p>
<label for="SchoolName">SchoolName</label>
<input id="SchoolName" name="SchoolName" type="text" value="" />
<input data-val="true" data-val-number="The field SchoolId must be a number." data-val-required="The SchoolId field is required." id="SchoolId" name="SchoolId" type="hidden" value="" />
<span class="field-validation-valid" data-valmsg-for="SchoolId" data-valmsg-replace="true"></span>
</p>
<p>
<input type="submit" />
</p>
</form>