Asp.net mvc 本地化DataAnnotations自定义验证属性

Asp.net mvc 本地化DataAnnotations自定义验证属性,asp.net-mvc,validation,data-annotations,Asp.net Mvc,Validation,Data Annotations,我目前在一个MVC2应用程序中工作,该应用程序必须将所有内容本地化为n种语言(目前为2种,没有一种是英语)。我用DataAnnotations验证模型类,但当我想验证DateTime字段时,发现DataTypeAttribute总是返回true,不管它是否为有效日期(这是因为当我输入随机字符串“foo”时,IsValid()方法会检查“01/01/0001”,不知道为什么) 决定编写自己的验证程序扩展ValidationAttribute类: public class DateTimeAttri

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

决定编写自己的验证程序扩展ValidationAttribute类:

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,但当我尝试对其进行本地化时,问题就开始了:

[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\u DATA\u所需的本地化消息(MSG是我的资源类),但是如果我输入了错误的格式化日期,我会得到“值'foo'对于INS\u DATA无效”默认消息,而不是本地化消息


我错了什么?

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

if((DateTime)value == DateTime.MinValue)

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

if((DateTime)value == DateTime.MinValue)
“如果”这个词很好用,顺便说一句,你的更礼貌。我的问题更多地涉及到这样一个事实,即使我在模型字段中同时指定了ErrorMessageResourceType和ErrorMessageResourceName,我仍然会得到默认的英文错误消息“值'blah'对INSU数据无效”,这不是我在资源文件中硬编码的内容。哦,对了。我不确定,下面是一个蹩脚的答案:听起来好像找不到资源:-]如果“如果”可以正常工作,顺便说一句,你的更礼貌。我的问题更多地涉及到这样一个事实,即使我在模型字段中同时指定了ErrorMessageResourceType和ErrorMessageResourceName,我仍然会得到默认的英文错误消息“值'blah'对INSU数据无效”,这不是我在资源文件中硬编码的内容。哦,对了。我不确定,下面是一个蹩脚的答案:听起来好像找不到资源:-]