2017-05-03 49 views
-1

我有一个MVC 5表单,我正在使用jQuery验证。我的问题是,基于特定的条件,我有一些文本框没有被写在窗体中。但是,DataAnnotation设置为Required,以便验证它们是否可见。无法停止验证不可见字段?

事情是,我的表单没有发布,因为所需的DataAnnotation不可见的字段。

我做了一些四处张望,发现一个建议,给我的表单一个ID和名称,然后只是下面的jQuery。我没有查看页面上的源代码,表单名称是正确的,但它仍然试图验证不可见的字段。

<script> 
    $(document).ready(function() { 
     $("#requestForm").validate({ ignore: ":not(:visible)" }); 
    });   
</script> 

只是为了澄清,这些不是隐藏的领域。它们是不会在视图中写出的文本框。这是视图中的代码。在我的情况下,这不是一个部分,所以这些文本框只是没有写出到页面,但它导致模型无效,从而阻止它被发布。

if (Model.RequestType.ToLower() == "partial") 
{ 

    <div class="form-group row"> 
     <div class="col-md-3"> 
      <label class="control-label">From</label> 
      @Html.TextBoxFor(m => m.PartialFrom, new { @maxlength = "4", @class = "form-control" }) 
      @Html.ValidationMessageFor(m => m.PartialFrom, null, new { @class = "text-danger" }) 
     </div> 
    </div> 
} 
+0

你也可以使用它像$( “#myForm会”)验证({。 忽略:“:hidden” }); –

+0

这没有任何意义。如果你没有生成输入,那么客户端验证不能在不存在的东西上执行。它根本不可能(隐藏的输入不被默认验证,所以即使它们被隐藏,也不会阻止表单提交)。如果你的表单没有提交,那么它的其他内容就是这个问题。但是,如果你确实意味着它正在触发POST方法并且'ModelState'无效,那么这是一个不同的问题。 –

+0

它正在打开POST,然后模型状态将它视为需要,即使输入框不可见。我最终通过使用https://github.com/jwaliszko/ExpressiveAnnotations来解决这个问题 – Caverman

回答

0

您可以使用下面的代码的vaidation插件代码之前:

$(document).ready(function(){  
    $.validator.setDefaults({ 
     ignore: [] 
    }); 
}); 

您可以检查JQUERY VALIDATION LOGS

+0

当你说在添加验证插件之前添加它时,我使用的是来自MVC的内置捆绑包,所以我有一个@ Scripts.Render (“〜/ bundles/jqueryval”)在我的_Layout.cshtml页面中。我测试的jQuery代码直接在我的视图(Index.cshtml)上。我如何制作它,以便它在插件代码之前? – Caverman