使用jQuery Unobtrusive Validation禁用元素验证

时间:2012-08-29 10:46:54

标签: jquery unobtrusive-validation

通过某个表单生成器,在页面上呈现元素列表,并且它们都具有对它们的验证。当我查看HTML源代码时,我看到类似这样的内容:

<input type="text" id="email" name="email" data-val-required="No valid email address!" data-val="true">

我需要以某种方式动态启用/禁用此类元素的验证。我尝试启用/禁用data-val属性,方法是将其设置为false,然后再返回true。但它似乎没有回应。验证总是存在!

任何人都知道如何以动态方式启用/禁用某些字段的验证?

5 个答案:

答案 0 :(得分:43)

我实际上找到了一个更符合我需求的解决方案。我可以做到以下几点:

$(function() {
    var settngs = $.data($('form')[0], 'validator').settings;
    settngs.ignore = ".ignore";
});

我可以通过在元素中添加或删除类名ignore来“切换”我想要的任何元素。

答案 1 :(得分:14)

我认为这会有所帮助。

<div class="editor-field">
       @{ Html.EnableClientValidation(false); }
       @Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" })
       @{ Html.EnableClientValidation(true); }
</div>

答案 2 :(得分:1)

我认为您需要编写自定义验证属性,然后在JQuery中自己处理数据。

请参阅此文章:http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2

答案 3 :(得分:0)

这对我来说更好:

$('#Reference').rules('add', 'required');
$('#Reference').rules('add', 'remove');
$('#Reference').rules('add', { minlength: 2 });

答案 4 :(得分:0)

我会在不覆盖不显眼的验证器默认值的情况下再添加一个选项。由于特定元素的验证由 data-val 属性控制,您可以将其设置为 data-val="false"

因此对于 Razor 助手,请使用:

@Html.TextBoxFor(model => Model.DateOfBirth, new { @class = "form-control", data_val = false })

对于新的 .net 核心语法,请使用:

<input asp-for="DateOfBirth" class="form-control" data-val="false">