3 votes

Valider une plage de dates avec Regula

Existe-t-il un moyen d'utiliser @Range pour valider une plage de dates dans Regula (ainsi que @Min et @Max) ?

Ou dois-je utiliser @Custom ?

@Range(min=

et

@Range(max=

ne semblent pas accepter les éléments du type Date - seulement les nombres ou les chaînes de caractères.

1voto

Vivin Paliath Points 40975

Malheureusement @Range n'accepte que les chiffres. Mais je pense que vous pouvez faire quelque chose comme ça :

<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 (c'est-à-dire entre les deux). Je n'ai pas documenté le date car je ne pense pas l'avoir implémenté lorsque j'ai écrit la documentation. Désolé, la documentation est un peu en retard car je travaille à la sortie de la version 1.3 de Regula, qui aura beaucoup plus de fonctionnalités. Je vais bientôt commencer à mettre à jour la documentation !

0voto

sq33G Points 2247

J'ai trouvé que le hack suivant fonctionne :

J'ai ajouté une deuxième entrée cachée qui contient la date saisie au 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, côté serveur (ASP.NET MVC dans mon cas), je génère l'heure Unix pour les valeurs minimale et maximale :

@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 c'est le cas, il y a des divergences inexpliquées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X