本地化DataAnnotations自定义验证属性

时间:2010-03-22 13:05:45

标签: asp.net-mvc validation data-annotations

我目前正在使用MVC 2应用程序,该应用程序必须使用n种语言进行本地化(目前为2,其中没有一种是英文顺便说一下)。我使用DataAnnotations验证我的模型类但是当我想验证DateTime字段时发现DataTypeAttribute总是返回true,无论它是否是有效日期(那是因为当我输入随机字符串“foo”时,IsValid( )方法检查“01/01/0001”,不知道为什么)。

决定编写我自己的验证程序,扩展ValidationAtribute类:

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);
    }
}

现在它检查确定何时有效且什么时候没有,但我的问题在我尝试本地化时开始:

[Required(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_Required")]
[CustomValidation.DateTime(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_DataType")]
public DateTime INS_DATA { get; set; }

如果我没有在该字段中放置任何内容我得到了一个本地化的MSG(MSG是我的资源类),用于key = INS_DATA_Required,但是如果我输入格式错误的日期,我得到“值'foo'对INS_DATA无效“默认消息,而不是本地化的MSG。

我在想什么?

1 个答案:

答案 0 :(得分:0)

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

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