2012-03-14 5 views
16

Я использую MVC3 с ненавязчивой проверкой. У меня есть поле, в котором пользователь должен заполнить некоторые данные, а затем нажать кнопку «Поиск». Если поиск не был нажат или пользователь изменил поле ввода после нажатия поиска, форма не может быть отправлена.Подтвердить скрытое поле

Я добавил скрытое поле, которое установлено в true по click() события кнопки и опустошается keyup() случае ввода. Теперь я хотел бы добавить правило проверки, которое требует, чтобы скрытое поле было true, чтобы разрешить отправку.

Желательно, чтобы я использовал ненавязчивую проверку, но если это не сработает, это нормально с чем-то, что требует некоторого javascript, если оно не испортит ненавязчивую проверку остальной части формы.

Следующий фрагмент кода делает именно то, что я хочу, пока не добавлю type="hidden".

<input class="required" id="client-searched" data-val="true" 
    name="ClientSearched" data-val-required="Press search!"/> 
<span class="field-validation-valid" data-valmsg-replace="true" 
    data-valmsg-for="ClientSearched"/> 

ответ

26

попробовать

var validator = $("#myFormId").data('validator');  
    validator.settings.ignore = ""; 

Вот информативный blog post

EDIT

@RAM предложил лучшее решение пожалуйста FOLLOW

+2

Он выглядит как и все, что изменилось после этого блога. В сообщении они объясняют, как * отключить * проверку скрытых полей. С jquery.validate 1.9.0 по умолчанию является 'ignore:": hidden "'. –

+0

Отключить игнорирование вообще, я не считаю это правильным решением – tutok

+0

@tutok его год назад ответить plz изменить вопрос, чтобы добавить ценный ввод ... приветствие – Rafay

20

у меня была аналогичная проблема, и я этот код для изменения значений по умолчанию в MVC 4:

@Scripts.Render("~/bundles/jqueryval") 

<script type="text/javascript"> 
    $.validator.setDefaults({ 
     ignore: "" 
    }) 
</script> 

Источник: JQuery validate

2

В некоторых случаях вы хотите просто игнорировать проверку на одном или нескольких скрытых полей (не все скрытое поле) в client side и вы хотите проверить их и другие скрытых полей в регионе server side. В этих случаях у вас есть атрибуты проверки для всех скрытых полей в вашем ViewModel, и они будут использоваться для проверки формы при ее публикации (server side).

Теперь вам нужен трюк, чтобы просто проверить некоторые скрытые поля на стороне клиента (не все). В этих случаях я рекомендую использовать мой механизм!

data-force-valtrue в целевых скрытых тегах ввода. Это наш пользовательский атрибут, который мы используем для обнаружения целевых скрытых входов, которые мы хотим проверить на стороне клиента.

// This hidden input will validate both server side & client side 
<input type="hidden" value="" name="Id" id="Id" 
     data-val-required="The Id field is required." 
     data-val="true" 
     data-force-val="true"> 

// This hidden input will validate both server side & client side 
<input type="hidden" value="" name="Email" id="Email" 
     data-val-required="The Email field is required." 
     data-val="true" 
     data-force-val="true"> 

// This hidden input just will validate server side 
<input type="hidden" value="" name="Name" id="Name" 
     data-val-required="The Neme field is required." 
     data-val="true"> 

Также вы можете установить data_force-val для ваших скрытых входов по jQuery:

$("#Id").attr("data-force-val", true); // We want validate Id in client side 
$("#Email").attr("data-force-val", true); // We want validate Email in client side 
$("#Name").attr("data-force-val", false); // We wont validate Name in client side (This line is not necessary, event we can remove it) 

Теперь активно data-force-val="true" функциональность некоторых простых кодов, подобные этим:

var validator = $("#TheFormId").data('validator');  
validator.settings.ignore = ":hidden:not([data-force-val='true'])"; 

Примечание: значение validator.settings.ignore по умолчанию is :hidden

Смежные вопросы