【问题标题】:Validate a Hidden Field验证隐藏字段
【发布时间】:2012-03-14 18:33:06
【问题描述】:

我正在使用带有不显眼验证的 MVC3。我有一个字段,用户应该填写一些数据,然后按“搜索”按钮。如果从未按下搜索或用户在按下搜索后更改了输入字段,则表单应该无法提交。

我添加了一个隐藏字段,该字段由按钮的click() 事件设置为true,并由输入框的keyup() 事件清空。现在我想添加一个验证规则,要求隐藏字段为true 以允许提交。

最好我想使用不显眼的验证,但如果这不起作用,也可以使用需要一些 javascript 的东西,只要它不会破坏表单其余部分的不显眼的验证。

以下代码 sn-p 完全符合我的要求,直到我添加 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"/>

【问题讨论】:

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


    【解决方案1】:

    试试

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

    这是一个内容丰富的blog post

    编辑

    @RAM 建议更好的解决方案请FOLLOW

    【讨论】:

    • 自那篇博文以来,情况似乎发生了变化。在帖子中,他们解释了如何禁用隐藏字段的验证。使用 jquery.validate 1.9.0 默认为 ignore: ":hidden"。
    • 它会完全忽略,我不认为这是正确的解决方案
    • @tutok 已经有一年的回答了,请编辑问题以添加您的宝贵意见...问候
    • 提议的解决方案将导致所有字段都将被验证,如果我们只想验证:hidden 字段的一部分,它就不起作用。我认为更好的主意是明确地执行此操作,例如 ignore: :hidden:not(".javascript-unobtrusive-validation-include")' 其中.javascript-unobtrusive-validation-include 类可能是我们应该参与验证过程的隐藏字段的标记。
    • @tutok,我在答案中使用数据属性here 描述了这一点
    【解决方案2】:

    我遇到了类似的问题,我在 MVC 4 中使用此代码更改默认值:

    @Scripts.Render("~/bundles/jqueryval")
    
    <script type="text/javascript">
        $.validator.setDefaults({
            ignore: ""
        })
    </script>
    

    来源: JQuery validate

    【讨论】:

      【解决方案3】:

      在某些情况下,您希望忽略一个或多个验证 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">
      

      您还可以通过jQuery为隐藏输入设置data_force-val:

      $("#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

      【讨论】:

        猜你喜欢
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 2012-04-25
        相关资源
        最近更新 更多