J'essaie d'utiliser un ASP.NET RangeValidator
pour valider une date dans une zone de texte. Le format de la date saisie dans la zone de texte est dd MMMM yyyy
.
Comment puis-je utiliser le validateur de plage pour valider une date valide? Si j'entre 1er janvier 10 comme valeur minimale ou maximale, le message d'erreur indiquant que la valeur peut ê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>
La meilleure option serait
Ajoutez un validateur de comparaison au formulaire Web. Définissez son 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>
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);
}
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>
Je crois que les dates doivent être spécifiées dans la culture actuelle de l'application. Vous voudrez peut-être expérimenter avec le paramètre CultureInvariantValues sur true et voir si cela résout votre problème. Sinon, vous devrez peut-être changer le DateTimeFormat pour la culture actuelle (ou le culture elle-même) pour obtenir ce que vous voulez.