Выполнение проверки по скрытым полям
У меня есть вид ниже:
@Html.LabelFor(m => m.CompanyPostCode)
@Html.TextBoxFor(m => m.CompanyPostCode)
@Html.LabelFor(m => m.CompanyCity)
@Html.TextBoxFor(m => m.CompanyCity)
@Html.HiddenFor(m => m.CompanyCityID)
Все атрибуты отмечены как [Обязательно] в моей модели просмотра. Тогда проблема в том, что мой CompanyCityID (помечен как обязательный) скрыт, и, таким образом, проверка не выполняется в представлении. Если я покажу этот атрибут, мой взгляд будет проверен.
![enter image description here]()
Мой вопрос: можно ли выполнить проверку в скрытом поле? Существует обходное решение?
Может показаться немного странным подтверждение скрытого поля. Причина в том, что это поле заполняется из jQuery на основе специальных правил. Если он не заполнен, я знаю, что что-то недействительно в представлении.
Спасибо.
Ответы
Ответ 1
Возможная причина может заключаться в том, что строка ignore: ':hidden'
находится в файле jquery.validate.unobtrusive.js
.
После версии 1.9.0 это поведение по умолчанию. Вы можете исправить это вручную, добавив
$.validator.setDefaults({ ignore: [] });
Как вы видите здесь
Еще одно изменение должно сделать установку форм со скрытыми элементами проще, теперь они игнорируются по умолчанию (опция "ignore" имеет ": hidden" теперь по умолчанию). Теоретически это может нарушить существующее настроить. В маловероятном случае, который он действительно делает, , вы можете исправить его установка опции игнорирования на "[]" (квадратные скобки без цитаты).
Ответ 2
Вы также можете просто прокомментировать эту строку в файле jquery.validate.js.
игнорировать: ": hidden"
Ответ 3
У меня была эта проблема. В моем случае мне пришлось вызвать валидатор после вызова ajax, а затем добавить флаг "игнорировать". См. Пример ниже:
$.validator.unobtrusive.parse("#frm");
$.validator.setDefaults({ ignore: [] });
Они были вызваны в Document.Ready().
Ответ 4
Если вам не нужно использовать javascript, в своем контроллере и в действии связанного с ним представления, вы можете добавить ошибку модели перед проверкой своей модели. Пример:
[HttpPost]
public ActionResult Fix(YourModel mdl)
{
if (mdl.CompanyCityID==0)
ModelState.AddModelError("", "Your error message!");
if (ModelState.IsValid)
{
//
//Some code
//
return View("YourView", yourlist);
}
return View(mdl);
}
Ответ 5
Вы всегда можете положить @Html.HiddenFor(m => m.CompanyCityID)
внутри скрытого div и изменить его на EditorFor()
.
CSS
.hidden {
display: none;
}
Просмотр
<div class="hidden">
@Html.EditorFor(m => m.CompanyCityID)
</div