我有一个非常简单的联系表格,其中包含以下字段:
<label>
First Name<em>*</em>
@Html.TextBox("txtFirstName", null, new { tabindex = "1"})
</label>
我希望这个字段是必需的,所以我添加了一些代码来准备文档:
$(function(){
$("#contactForm").validate({
rules: {
txtFirstName: { required: true}
/* also tried this */
txtFirstName: "required"
}
});
});
但是,此时它不需要该字段。看起来很疯狂的是,如果我添加一个“必需”类属性,如下所示:
@Html.TextBox("txtFirstName", null, new { tabindex = "1", @class="required"})
它将验证,但我需要更复杂的规则而不是仅仅需要。我需要检查选择列表中是否选择了某些选项,然后应该或不应该需要某些字段。
答案 0 :(得分:3)
我怀疑您已将jquery.validate.unobtrusive.js
脚本包含在您的网页中。此脚本在表单上注册自己的.validate
处理程序,这显然与您的处理程序冲突。当您使用数据注释装饰视图模型以执行验证并且将这些数据注释转换为生成的输入字段上的HTML5 data- *属性时,将使用jquery.validate.unobtrusive.js
脚本。那些HTML5 data- *属性然后由jquery.validate.unobtrusive.js
脚本解释,该脚本在表单上注册.validate
处理程序。
如果要定义自己的验证规则并注册自定义.validate
规则,则必须手动执行(如您所做)并从此页面中删除内置不显眼验证脚本的任何痕迹。
在输入字段上添加class="required"
属性时验证有效的原因是jquery.validate.unobtrusive.js
选择了它并且在通过注册{来配置插件时将其包含在自己的规则中表单上的{1}}方法。