jQuery Validation - form.valid() 始终返回 true



当我尝试检查表单是否有效时,我遇到了一种情况,但是form.valid()总是返回true。但是,如果我尝试验证单个控件,它会返回 false。

这是我的表格:

<div class="profilestagsedit">
    @using (Html.BeginForm("", "", FormMethod.Post, new { id = "tagsform" }))
    {
        @Html.ValidationMessageFor(x => x.EditTagsText)
        @Html.TextBoxFor(p => p.EditTagsText, new
           {
               @id = "txtprofileedittags"
           })
    }
</div>

这是我的视图模型:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter at least one Tag ")]
public string EditTagsText { get; set; }

这是jQuery代码:

   $('#tagsform').removeData("validator");
   $('#tagsform').removeData("unobtrusiveValidation");
   $.validator.unobtrusive.parse('#tagsform');
   $('#tagsform').validate();

在保存按钮上单击:

var isValid = $('#tagsform').validate().element($('#txtprofileedittags')); <-- false
$('#tagsform').valid() true <--

我也希望form.valid()返回false,我做错了什么?

这个问题已经有一个公认的答案,但我相信我已经找到了更具体的答案。 我发现,如果表单中的第一个经过验证的元素具有"name"标签,那么一切都按您的预期工作(也就是说,如果表单无效,.valid() 将返回 false)。 接受的答案方便地包含一个"名称"标签,因此它起作用了。

在正常形式中,您肯定需要名称标签,因为这是将数据提交到服务器时使用的名称标签。 但在更现代的环境中,例如使用 Knockout 的环境,没有理由使用"name"标记,因为数据绑定可以保持数据模型的更新。

您应该将 required 添加到输入中

<input type="text" name="name" required>

在此处查看工作演示

对于不显眼的 HTML 5 兼容属性,描述要附加到输入字段的验证程序 data-val="true"

在此处查看更多信息

我引用了这两个文件:

  • jquery.validate.js
  • jquery.validate.unobstrusive.js

删除对jquery.validate.unobstrusive.js的引用,为我修复了它

希望这对某人有所帮助

最新更新