Comme vous le savez tous, les validateurs Compare peuvent être utilisés pour valider les dates et vérifier en fonction du type d'opérateur (<, <=,> = etc). J'ai défini la propriété cultureinvariantvalues="true"
pour valider deux contrôles de zone de texte contenant des dates. Je dois les contraindre de manière à ce que la date de début soit antérieure à la date de fin. La validation semble échouer lorsque je tape une date descriptive comme ci-dessous:
StartDate: Tuesday, 21 February 2012
FinishDate: Wednesday, 22 February 2012
Même si 22 est supérieur au 21, la validation échoue. Le balisage que j'ai utilisé est ci-dessous. Si, pour une raison quelconque, vous avez besoin d'informations sur le format, il s'agit ici de dddd, dd MMMM yyyy
<asp:CompareValidator id="cvtxtStartDate" runat="server"
controltocompare="txtFinishDate"
cultureinvariantvalues="true"
display="Dynamic"
enableclientscript="true"
controltovalidate="txtStartDate"
errormessage="Start date must be earlier than finish date"
type="Date"
setfocusonerror="true"
operator="LessThanEqual"
text="Start date must be earlier than finish date">
Essayez cette approche, entrez d’abord la date de début et vérifiez le champ de comparaison du validateur avec la date de fin:
<asp:CompareValidator id="cvtxtStartDate" runat="server"
ControlToCompare="txtStartDate" cultureinvariantvalues="true"
display="Dynamic" enableclientscript="true"
ControlToValidate="txtFinishDate"
ErrorMessage="Start date must be earlier than finish date"
type="Date" setfocusonerror="true" Operator="GreaterThanEqual"
text="Start date must be earlier than finish date"></asp:CompareValidator>
Le validateur de comparaison a le type = date.Mais ce type de date est contraint à accepter uniquement un format de date particulier, par exemple ToShortDateString (). Si le format de date des deux zones de texte à comparer est dans un autre format comme ToLongDateString ( ) ou un format spécifié par ToString ("jj MMMM, aaaa"), la comparaison ne fonctionne pas. Option CustomValidator isonly. Si vous souhaitez utiliser le validateur de comparaison uniquement, alors
textstartdate.text=Calendar1.SelectedDate.ToShortDateString();
textfinishdate=Calendar2.SelectedDate.ToShortDateString();
<asp:CompareValidator ID="CompareValidator4" runat="server"
ControlToCompare="textstartdate" ControlToValidate="textfinishdate"
CultureInvariantValues="True"
ErrorMessage="Date should be greater than booking date."
Operator="GreaterThanEqual" SetFocusOnError="True" Type="Date"></asp:CompareValidator>
function FromAndToDateValidate() {
try {
var StartDate = new Date();
StartDate = $("#dtpFromDate").val();
var EndDate = new Date();
EndDate = $("#dtpToDate").val();
args.IsValid = (StartDate <= EndDate);
}
catch (ex) {
alert(ex);
}
}
Essayez le Validator personnalisé et, au niveau du code situé derrière l'événement onservervalidate, convertissez le texte en DateTime, puis effectuez la comparaison.
protected void DateTimeComparision_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = Convert.ToDateTime(txtStartDate.Text) < Convert.ToDateTime(txtFinishDate.Text);
}