2010-03-22 10 views
1

Je travaille actuellement dans une application MVC 2 qui doit avoir tout localisé en n-langues (actuellement 2, aucun d'entre eux anglais btw). Je valide mes classes de modèle avec DataAnnotations mais quand je voulais valider un champ DateTime, j'ai découvert que DataTypeAttribute revenait toujours vrai, peu importe si c'était une date valide ou pas (parce que quand j'entre une chaîne aléatoire "foo", l'IsValid () méthode vérifie contre "01/01/0001", ne sais pas pourquoi).Localisation de DataAnnotations Attribut de validation personnalisée

a décidé d'écrire ma propre validateur extension classe 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); 
    } 
} 

Maintenant, il vérifie OK quand est valide et quand ce n'est pas, mais mon problème commence lorsque je tente de le localiser:

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

Si je ne mets rien sur le terrain je reçois un MSG localisé (MSG étant ma classe de ressources) pour la clé = INS_DATA_Required mais si je mets une date mal formatée je reçois le "La valeur 'foo' n'est pas valide pour INS_DATA" message et pas le MSG localisé.

Qu'est-ce que je rate?

Répondre

0

Il se peut que votre ToString() utilise un format «localisé» pour que votre chaîne codée en dur ne corresponde pas. essayez de remplacer votre « si » état avec:

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

que « si » fonctionne bien comme il est, d'ailleurs le vôtre est plus poli. Ma question se rapportait plus au fait que, même si je spécifie à la fois ErrorMessageResourceType et ErrorMessageResourceName dans le champ Modèle, je reçois toujours le message d'erreur par défaut en anglais "La valeur 'blah' n'est pas valide pour INS_DATA" qui n'est pas ce que je codé en dur dans mon fichier de ressources. –

+0

Oh, c'est vrai. Je ne suis pas sûr, * réponse boiteuse suit: * il semble qu'il ne peut pas trouver la ressource: -] – Myster