ASP.NET MVC5模态框表单验证正常但IsValid始终为false无法触发控制器方法
解决ASP.NET MVC5模态框表单验证
IsValid()始终返回false的问题 嘿,我一眼就揪出了核心问题——你把jQuery Validate的验证方法名写错了!JS里的方法是小写开头的valid(),而不是你写的IsValid()(这是C#的命名习惯,JS遵循小驼峰规则)。这就是为啥视觉上验证提示正常,但代码里的条件永远进不去的原因。
下面给你一步步的修复方案,顺便优化下你的代码:
1. 修正验证方法调用
把提交函数里的判断语句改成这样:
if (formRef.valid()) { // 你的AJAX提交逻辑 }
2. 优化表单验证解析逻辑
你现在每次点击提交都重复移除验证数据再解析,其实完全可以把解析逻辑放到模态框显示的时候,只做一次就够了:
function AddView() { $("#BtnUpdate").hide(); $("#BtnSubmit").show(); $("#myModal").modal('show'); $("#ChaptCatId").val(""); $("#CatName").val(""); // 模态框显示后,重新解析表单验证规则 const formRef = $("#formSubmit"); formRef.removeData('validator').removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse(formRef); return false; } function BtnSubmit() { const formRef = $("#formSubmit"); // 直接调用正确的valid()方法 if (formRef.valid()) { const data = formRef.serialize(); $.ajax({ type: 'POST', url: '@Url.Action("PostData","Home")', data: data, dataType: 'JSON', success: function (response) { $.notify(response.message, { className: 'success', globalPosition: 'top center' }) dtCatList.ajax.reload(); $("#myModal").modal('hide'); }, error: function () { alert("Error while Saving"); } }); } }
3. 额外检查项(避免踩其他坑)
- 确认你的
ChapterCategory模型里,CatName属性加了正确的验证特性,比如必填:
public class ChapterCategory { public int ChaptCatId { get; set; } [Required(ErrorMessage = "Category name is required")] public string CatName { get; set; } }
- 确保页面脚本引入顺序正确:jQuery → jQuery Validate → jQuery Unobtrusive Validate,顺序错了会导致验证失效
- 检查隐藏字段
ChaptCatId的验证规则,如果模型里给它加了[Required],那空值会导致验证失败(不过int类型默认是0,一般不会有问题)
测试验证
改完之后,先测试空提交,确认视觉验证提示正常;然后填写合法内容,此时formRef.valid()应该返回true,就能顺利触发你的AJAX提交逻辑,调用控制器的PostData方法了。
内容的提问来源于stack exchange,提问作者Fazil Basheer
相关产品推荐
相关产品推荐

