开发者

Localizing DataAnnotations Custom Validation Attribute

开发者 https://www.devze.com 2022-12-24 18:28 出处:网络
I\'m currently working in an MVC 2 app which has to have everything localized in n-languages (currently 2, none of them english btw). I validate my model classes with DataAnnotations but when I wanted

I'm currently working in an MVC 2 app which has to have everything localized in n-languages (currently 2, none of them english btw). I validate my model classes with DataAnnotations but when I wanted to validate a DateTime field found out that the DataTypeAttribute returns always true, no matter it was a valid date or not (that's because when I enter a random string "foo", the IsValid() method checks against "01/01/0001 ", dont know why).

Decided to write my own validator extending ValidationAtribute class:

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

Now it checks OK when is valid and when it's not, but my problem starts when I try to localize it:

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

If I put nothing in the field I get a localized MSG (MSG being my resource class) for the key=INS_DATA_Required but if I put a bad-formatted date I get the "The value 'foo' is not valid for INS_DATA" default message and not the localized MSG.

What am I misssing?


It could be that your ToString() is using a 'localized' format so your hard coded string will not match. try replacing your "if" condition with:

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

精彩评论

暂无评论...
验证码 换一张
取 消