2010-07-15 4 views
2

J'ai une propriété DateTime dans mon modèle et je souhaite la valider à l'aide de DataAnnotations. À mon avis, je veux obtenir ce DateTime comme un nombre de jours (par exemple "3"), au lieu d'un DateTime (par exemple "7/14/2010"). Si l'utilisateur entre «3» dans la vue, DataAnnotation le trouve invalide - et c'est le problème.DataAnnotations sur une propriété DateTime

Quelles sont mes options dans ce scénario?

Merci beaucoup pour votre aide.

+0

FYI voici comment je l'ai résolu. J'ai un datetime dans ma table -Je veux entrer un nombre de jours à partir de la vue, ajouter cet entier à la date et l'heure actuelles, et stocker le résultat dans ma table. J'ai donc étendu le modèle (en utilisant des classes partielles) pour ajouter une propriété entière (qui ne sera pas stockée dans la base de données). Au POST, j'effectue DateTime.Add et stocke le datetime résultant dans la table. –

Répondre

2

On dirait que vous utilisez le mauvais type de le travail. Une mesure dans "days" est un TimeSpan, pas un DateTime. Je voudrais mettre à jour votre modèle pour exposer la propriété en tant que TimeSpan. Vous pouvez valider avec un validateur personnalisé comme suit:

[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = false)] 
public class TimeSpanAttribute: ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     if (value is TimeSpan) 
     { 
      return true; 
     } 
     else if (value is String) 
     { 
      TimeSpan result; 
      return TimeSpan.TryParse((string)value, out result); 
     } 

     return false; 
    } 
} 
1

Je pense que vous comparez des pommes avec des oranges. Si vous avez spécifié que votre propriété est DateTime, vous ne pouvez pas entrer la valeur 3 pour cette propriété. Pourquoi ne pas faire cette propriété de type Int?

Ensuite, si vous avez besoin de retourner un DateTime ... il suffit d'utiliser cette valeur entière pour créer quelque soit la date dont vous avez besoin d'ajouter ou de soustraction par exemple:

DateTime myDate = DateTime.Now.Date.AddDays(intValue); 
+0

Salut Leniel merci pour votre aide. J'ai peur que ma question ne soit pas très claire, alors j'ai ajouté un commentaire à mon message original. Merci encore. –

Questions connexes