我正在使用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"/>
答案 0 :(得分:26)
尝试
var validator = $("#myFormId").data('validator');
validator.settings.ignore = "";
这是一个内容丰富的blog post
修改
@RAM建议更好的解决方案,请FOLLOW
答案 1 :(得分:20)
我遇到了类似的问题,我使用此代码更改了MVC 4中的默认值:
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
$.validator.setDefaults({
ignore: ""
})
</script>
来源: JQuery validate
答案 2 :(得分:2)
在某些情况下,您希望忽略一个或多个验证
client side
中的隐藏字段(并非所有隐藏字段),您还需要在 server side
中验证它们和其他隐藏字段。
在这些情况下,您拥有ViewModel
中所有隐藏字段的验证属性,当您发布表单时,它们将用于验证表单(server side
)。
现在你需要一个技巧来验证客户端的一些隐藏字段(不是全部)。在这些情况下,我建议你使用我的机制!
将data-force-val
设置为目标隐藏输入标记中的true
。这是我们的自定义属性,我们用它来检测我们想要在客户端验证它们的目标隐藏输入。
// 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
默认值为:hidden