65 votes

Validation de la date avec le validateur ASP.NET

J'essaie d'utiliser un ASP.NET RangeValidator pour valider une date sur une zone de texte. Le format de la date entrée dans la zone de texte est dd MMMM yyyy .

Comment puis-je utiliser le validateur de plage pour valider une date valide? Si je saisis 1 janvier 1000 comme valeur minimale ou maximale, le message d'erreur indiquant que la valeur ne peut pas être convertie en type date est erroné, mais si j'utilise un autre format, le texte saisi est invalide.

Ci-dessous mon code:

 <asp:TextBox 
    runat="server" 
    ID="txtDatecompleted" 
/>
<cc2:CalendarExtender
    ID="datecompletedExtender" 
    runat="server"
    TargetControlID="txtDatecompleted"
    Format="dd MMMM yyyy"
/>  
<asp:RangeValidator 
    runat="server" 
    ID="RangeValidator1" 
    Type="Date" 
    ControlToValidate="txtDatecompleted" 
    MaximumValue="9999/12/28" 
    MinimumValue="1000/12/28" 
    ErrorMessage="enter valid date" 
    Display="None"
/>
<cc2:ValidatorCalloutExtender 
    ID="RangeValidator1_ValidatorCalloutExtender" 
    runat="server"
    Enabled="True"
    TargetControlID="RangeValidator1">
</cc2:ValidatorCalloutExtender>
 

128voto

Shoban Points 18742

La meilleure option serait

Ajoutez un validateur de comparaison au formulaire Web. Définissez sa propriété controlToValidate. Définissez sa propriété Type sur Date. Définissez sa propriété d'opérateur sur DataTypeCheck, par exemple:

 <asp:CompareValidator
    id="dateValidator" runat="server" 
    Type="Date"
    Operator="DataTypeCheck"
    ControlToValidate="txtDatecompleted" 
    ErrorMessage="Please enter a valid date.">
</asp:CompareValidator>
 

28voto

Chris Van Opstal Points 16961

Un CustomValidator fonctionnerait également ici:

 <asp:CustomValidator runat="server"
    ID="valDateRange" 
    ControlToValidate="txtDatecompleted"
    onservervalidate="valDateRange_ServerValidate" 
    ErrorMessage="enter valid date" />
 

Code-behind:

 protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args)
{
    DateTime minDate = DateTime.Parse("1000/12/28");
    DateTime maxDate = DateTime.Parse("9999/12/28");
    DateTime dt;

    args.IsValid = (DateTime.TryParse(args.Value, out dt) 
                    && dt <= maxDate 
                    && dt >= minDate);
}
 

8voto

Cherian Paul Points 41

Je pense que ce qui suit est la meilleure façon de le faire.

 <asp:TextBox ID="DateControl" runat="server" Visible="False"></asp:TextBox>
<asp:RangeValidator ID ="rvDate" runat ="server" ControlToValidate="DateControl" ErrorMessage="Invalid Date" Type="Date" MinimumValue="01/01/1900" MaximumValue="01/01/2100" Display="Dynamic"></asp:RangeValidator>
 

2voto

tvanfosson Points 268301

Je crois que les dates doivent être indiquées dans la culture actuelle de l'application. Vous pouvez essayer le réglage de CultureInvariantValues de vrai et voir si cela résout votre problème. Sinon, vous devrez peut-être modifier le DateTimeFormat pour la culture actuelle (ou la culture elle-même) pour obtenir ce que vous voulez.

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