Выполнение проверки по скрытым полям

У меня есть вид ниже:

    @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