我有一种情况,当我尝试检查表单是否有效,但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>
这是我的viewmodel:
[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,我做错了什么?
答案 0 :(得分:7)
这个问题已经有了一个公认的答案,但我相信我找到了更具体的答案。我发现如果表单中的FIRST验证元素有一个'name'标记,那么一切都按预期工作(即。(如果表单无效,.valid()将返回false)。接受的答案很方便地包含一个“名称”标签,因此它起作用。
在普通形式中,您肯定需要名称标签,因为这是将数据提交到服务器时使用的名称标签。但是在更现代的环境中,例如那些使用Knockout的环境,没有理由拥有“名称”标签,因为数据绑定可以保持数据模型的更新。
答案 1 :(得分:3)
您应该在输入中添加必需的
<input type="text" name="name" required>
查看工作演示here
对于不显眼的HTML 5兼容属性,描述要附加到输入字段data-val="true"
的验证器。
查看更多信息here
答案 2 :(得分:-1)
我正在引用这两个文件:
删除对 jquery.validate.unobstrusive.js 的引用,为我修复了
希望这有助于某人