验证隐藏字段

时间:2012-03-14 18:33:06

标签: asp.net-mvc-3 jquery-validate unobtrusive-validation

我正在使用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"/>

3 个答案:

答案 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