我在linq sql类的接口中使用DataAnnotations。 多数民众赞成。
我的日期时间字段存在问题
我的代码如下:
[DataType(DataType.Date)]
[RegularExpression(@"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$", ErrorMessage = "regexFail")]
DateTime? DateofBirth { get; set; }
现在数据类型表达式工作正常,它会带来日期而不是日期时间。 问题在于对字段的验证。我的正则表达式与日期不匹配,即使我将它放入引擎中也是如此。例如,我把“10/10/2010”放在字段中,我得到错误“regexFail”。
我很确定我的表情很好,所以我不确定这是错的。
提前致谢。
答案 0 :(得分:3)
我认为发生的事情是DateTime
值被转换为字符串,然后与模式匹配。如果是这种情况,并且正在使用ToString
,则默认时间12:00:00 AM
将包含在匹配的字符串中。
我尝试了以下代码,IsValid
返回了true
:
string pattern = @"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d\s12:00:00\sAM$";
RegularExpressionAttribute attribute = new RegularExpressionAttribute(pattern) { ErrorMessage = "regexFail" };
DateTime dt = new DateTime(2010, 10, 10);
bool isValid = attribute.IsValid(dt);
答案 1 :(得分:2)
使用DateTime
属性修饰[RegularExpression]
字段没有任何意义。此属性与字符串类型一起使用。当您具有DateTime属性时,默认模型绑定器将使用当前区域性设置将请求值解析为DateTime,假设它是POST请求,并且如果它是GET请求,它将使用yyyy-MM-dd格式。因此,您可以看到它是默认的模型绑定器,负责将用户HTTP请求转换为DateTime字段的实例,并且RegularExpression验证器不起作用。
因此,如果您想将用户可以输入的日期限制为某种自定义格式,则可以使用custom model binder作为日期。
对于其他值类型(例如整数和双精度)也是如此。