2013-08-28 4 views
3

Est-il possible d'utiliser @Range pour valider une plage de dates dans Regula? (ditto @Min et @Max)Valider la plage de dates avec Regula

Ou dois-je utiliser @Custom?

@Range(min= 

et

@Range(max= 

ne semblent pas accepter quoi que ce soit du type date - que des chiffres ou des chaînes.

Répondre

1

Malheureusement, @Range accepte uniquement les nombres. Je pense que vous pouvez faire quelque chose comme ça si:

<input type="hidden" 
     name="date" 
     id="date" 
     data-constraints=" 
      @Future(date='2000/1/1', format='YMD') 
      @Past(date='2010/1/1', format='YMD')" 
/> 

Cela garantit que la date est postérieure 2000/1/1 et avant 2010/1/1 (à savoir, entre les deux). Je n'ai pas documenté le paramètre date car je ne pense pas l'avoir implémenté lorsque j'ai écrit la documentation. Pardon; la documentation est un peu en retard parce que je travaille sur la version 1.3 de Regula, qui aura beaucoup plus de goodies. Je vais commencer à mettre à jour la documentation bientôt!

+0

Merci! Les docs sont bons, le nouveau v. Avec goodies sonne bien aussi! Pour l'anecdote, l'utilisation d'une chaîne semble fonctionner - mais comme j'utilisais les horodatages Unix, il n'y avait vraiment aucune raison pour que ce ne soit pas des valeurs entières. – sq33G

+0

'@ Range' devrait fonctionner si vous utilisiez le temps de l'époque. Étrange ce n'était peut-être pas une sorte de bug. Veuillez déposer un rapport de bogue si vous le pouvez. –

+0

Le problème de temps était entre le JavaScript Date.getTime et la méthode .NET que j'ai décrite dans ma réponse. Regula fonctionne magnifiquement. – sq33G

0

je trouve que le hack fonctionne:

J'ai ajouté une seconde, entrée cachée qui contient la date encodée dans le format de Date.getTime():

<input type="hidden" data-bind="value: myDateValue.getTime()" ... /> 

(J'utilise Kendo MVVM, mais Je suis sûr que d'autres bibliothèques MVVM peuvent gérer la même approche)

Ensuite, pour la contrainte, sur le côté serveur (ASP.NET MVC dans mon cas) je générer le temps Unix pour le min et max:

@Range(min="<%= (dateTime1 - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds %>", 
     max="<%= (dateTime2 - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds %>") 

EDIT

nécessité d'utiliser .TotalMilliseconds - et même si il y a une différence inexpliquée.