jQuery Validation表单验证失效求助:$('form').valid()始终返回true
表单验证失效排查方案
以下是导致$('form').valid()始终返回true的几个关键问题:
模型属性与
asp-for拼写/大小写不匹配- Price字段:表单中
asp-for="price"为小写开头,模型类中属性是public decimal Price { get; set; }(大写P),大小写不匹配会导致Unobtrusive Validation无法生成对应的验证规则属性。 - Description字段:表单中
asp-for="Descritpion"拼写错误,模型类中正确属性名是Description,拼写错误会使验证规则无法绑定到输入框。
解决:修正asp-for属性值,与模型属性名完全一致:
<input type="number" min="0" class="form-control" asp-for="Price" value="@Model.Price" /> <input type="text" class="form-control" asp-for="Description" value="@Model.Description" />- Price字段:表单中
脚本依赖顺序错误
jQuery Validation和Unobtrusive Validation都依赖jQuery核心库,必须确保引入顺序为:jQuery → jquery.validate.js → jquery.validate.unobtrusive.min.js。若未先引入jQuery,验证逻辑根本无法初始化,甚至可能无控制台报错。
解决:在验证脚本前添加jQuery引入,示例:<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.5/dist/jquery.validate.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>输入框ID无关错误(建议修正)
表单中Price输入框ID设为fname、Description输入框ID设为phone,这些ID与属性名不匹配,虽不直接影响验证,但会导致后续DOM操作出错,建议删除手动设置的ID,让asp-for自动生成与属性名一致的ID。
修正后刷新页面,打开浏览器开发者工具的Elements面板,查看输入框是否生成data-val="true"、data-val-required等验证属性,若存在则说明Unobtrusive Validation已正确初始化,此时调用$('form').valid()即可正常返回验证结果。
内容的提问来源于stack exchange,提问作者n___dv
相关产品推荐
相关产品推荐

