首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >本地化DataAnnotations自定义验证属性

本地化DataAnnotations自定义验证属性
EN

Stack Overflow用户
提问于 2010-03-22 21:05:45
回答 1查看 1.9K关注 0票数 2

我目前在一个MVC2应用程序中工作,该应用程序必须将所有内容都本地化为n语言(目前是2种,没有一种是英语btw)。我用DataAnnotations验证我的模型类,但是当我想验证一个DateTime字段时,我发现DataTypeAttribute总是返回true,不管它是不是一个有效的日期(这是因为当我输入一个随机字符串"foo“时,IsValid()方法会检查"01/01/0001 ",不知道为什么)。

决定编写我自己的验证器来扩展ValidationAtribute类:

代码语言:javascript
运行
复制
public class DateTimeAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime result;
        if (value.ToString().Equals("01/01/0001 0:00:00"))
        {
                return false;
        }
        return DateTime.TryParse(value.ToString(), out result);
    }
}

现在它检查OK何时有效,何时无效,但当我尝试本地化它时,问题就开始了:

代码语言:javascript
运行
复制
[Required(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_Required")]
[CustomValidation.DateTime(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_DataType")]
public DateTime INS_DATA { get; set; }

如果我在字段中什么都不放,我会得到key=INS_DATA_Required的本地化消息( MSG是我的资源类),但是如果我放了一个格式错误的日期,我会得到"The value 'foo‘is not valid for INS_DATA“的默认消息,而不是本地化的消息。

我错过了什么?

EN

Stack Overflow用户

发布于 2010-03-24 12:22:59

可能是您的ToString()使用的是“本地化”格式,因此您的硬编码字符串将不匹配。尝试将"if“条件替换为:

代码语言:javascript
运行
复制
if((DateTime)value == DateTime.MinValue)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2492369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档