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

C# Model Validation 合法范围内日期被判定为无效问题

问题原因

  • 核心问题是模型字段类型与校验规则不匹配:你给string类型的DOB字段添加了typeof(DateTime)类型的Range校验,校验逻辑无法直接将字符串类型的日期和DateTime范围做正确比对,直接导致校验失效。
  • HTML5 type="date"输入框提交的日期格式为yyyy-MM-dd,你Range特性中定义的范围值是1/1/2000这类月/日/年格式,不同区域的系统日期解析规则不同时,也会出现范围解析错误的问题。

解决方法

方案1(推荐):修改模型字段为DateTime类型

直接将DOB字段的类型从string改为DateTime,同时将Range的范围值改为ISO标准日期格式避免解析歧义,修改后模型代码如下:

[Display(Name = "Date of Birth")]
[Required(AllowEmptyStrings = false, ErrorMessage = "This field is required.")]
[Range(typeof(DateTime), "2000-01-01", "2010-01-01", ErrorMessage = "Date is out of Range")]
[DataType(DataType.Date)]
public DateTime DOB { get; set; }

视图代码可以直接改用EditorFor减少手动配置:

@Html.EditorFor(m => m.DOB, new { @class = "form-control", @id = "dob" })
@Html.ValidationMessageFor(m => m.DOB)

方案2(仅特殊场景必须用string存储时使用):自定义字符串日期校验

如果业务要求必须用字符串存储日期,就移除现有的DateTime类型Range校验,自己实现针对字符串格式的日期范围校验逻辑,或者用正则表达式先匹配日期格式再做范围判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:06:05