You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC文本字段验证失效但数字字段验证正常求助

问题根因与排查方案

你看到的Price字段验证生效大概率是值类型的默认约束导致的:decimal是值类型,天生不允许为null,即便你不加[Required]特性,提交空值时模型绑定阶段就会自动抛出验证错误,不能说明你的数据注解验证逻辑是正常运行的。Title是引用类型string,没有默认非空约束,完全依赖[Required]特性触发验证,所以才会出现两个字段表现不一致的情况。

按以下步骤逐一排查即可定位问题:

第一步:先确认服务端验证是否正常

禁用浏览器JavaScript后,提交空的Title和Price字段,看返回的页面中Title字段是否展示错误提示:

  • 如果展示错误,说明服务端验证逻辑正常,问题出在客户端验证
  • 如果不展示错误,说明服务端的验证逻辑本身没有生效

服务端验证失效的解决方案

  • 检查Product类中[Required]特性引用的命名空间是否正确,必须是using System.ComponentModel.DataAnnotations;,不要误引用其他库的同名特性
  • 检查视图顶部的@model指令指向的Product类是否是你贴出的这个类,确认没有引用其他命名空间下的同名Product类
  • 检查项目全局配置是否关闭了数据注解验证:MVC默认是开启状态,如果你在Global.asax.cs(MVC5及之前版本)或者Startup.cs(ASP.NET Core)中手动关闭了数据注解验证,需要重新开启

客户端验证失效的解决方案

  • 右键查看页面源代码,找到Title对应的输入框,确认标签上存在data-val="true"和data-val-required="This is Required Field"两个属性:
    • 如果没有这两个属性,说明视图渲染时没有读取到模型的验证特性,回到服务端排查逻辑检查模型配置
    • 如果存在这两个属性,按F12打开浏览器控制台查看是否有JS报错:常见原因是页面重复加载了jQuery库,后续加载的jQuery会覆盖之前已经挂载的jquery.validate插件,导致验证逻辑失效,只要删掉重复引入的jQuery即可
  • 确认你引入的三个JS文件的顺序没有错:必须先加载jQuery,再加载jquery.validate.min.js,最后加载jquery.validate.unobtrusive.min.js,你当前的引入顺序是正确的,只要确保没有其他地方打乱顺序即可

内容的提问来源于stack exchange,提问作者Shazoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:48:02