jquery不引人注目的验证不使用data-val属性?



我有一个使用jquery验证的表单,由ASP生成。. NET标签帮助器:

@Html.LabelFor(m => m.Id, new { @class = "control-label" })
@Html.TextBoxFor(m => m.Id, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Id, "", new { @class = "text-danger" })

生成:

<form id="dsForm">       
<label class="control-label" for="Id">Rule ID</label>
<input class="form-control" data-val="true" data-val-length="The field Rule ID must be a string with a minimum length of 3 and a maximum length of 100." data-val-length-max="100" data-val-length-min="3" data-val-required="Rule ID is required." id="Id" maxlength="100" name="Id" type="text" value="">
<span class="text-danger field-validation-valid" data-valmsg-for="Id" data-valmsg-replace="true"></span>    
</form>

我试图调用jquery验证使用:

<a onclick="dsValidate()">Validate</a>
<script>
function dsValidate() {
$('#dsForm').validate();
if ($('#dsForm').valid() === true) {
console.log("valid");
} else {
console.log("invalid");
}
}
</script>

然而,这总是记录"有效性",即使输入违反了data-val属性中的规则。

如果我直接在javascript中定义规则,它可以工作:

$('#dsForm').validate({
rules: {
Id: {
required: true,
minlength: 3,
maxlength: 100
}
},
messages: {
Id: {
required: "ID is required.",
minlength: "ID must be 3-100 chars.",
maxlength: "ID must be 3-100 chars."
}
}                
});

为什么validate()函数不识别data-val属性中定义的规则?

我已经确认必要的jquery库按顺序加载:

<script src="/lib/jquery/dist/jquery.min.js"></script>
<script src="/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

我在调用validate之前将这一行添加到javascript函数中:

$.validator.unobtrusive.parse($('#dsForm'));

我认为这是必要的,因为我的表单在验证之前是动态填充的。

最新更新