Comment Utiliser un Comparer Validateur avec DateTime.Aujourd'hui contre la zone de texte.Texte?
Objectif:
J'ai une 'date de fin' zone de texte que les mises à jour à l'utilisateur de le changer. Je veux être en mesure de vérifier/valider la date de EndDateTextBox.Texte et assurez-vous qu'il est inférieur à la date d'aujourd'hui (en format ex: 4/19/2013).
J'ai essayé deux méthodes:
De La Méthode
<asp:TextBox ID="HiddenTodayDate" Visible = "false" runat="server" />
<asp:CompareValidator ID="CompareEndTodayValidator" Operator="GreaterThan" Type="Date"
ControlToValidate="HiddenTodayDate" ControlToCompare="EndDateTextBox"
ErrorMessage="'End Date' must be before today's date" runat="server" />
Et le suivant dans ma méthode Page_Load:
HiddenTodayDate.Text = DateTime.Today.ToShortDateString();
Méthode Deux
<asp:HiddenField ID="HiddenTodayDate" runat="server" />
<asp:CompareValidator ID="CompareEndTodayValidator" Operator="GreaterThan" Type="Date"
ControlToValidate="HiddenTodayDate" ControlToCompare="EndDateTextBox"
ErrorMessage="'End Date' must be before today's date" runat="server" />
Et le suivant dans ma méthode Page_Load:
HiddenTodayDate.Value = DateTime.Today.ToShortDateString();
Le code savvy évidemment la fixation d'un TextBox
visible à false empêche la Validator
de les voir ainsi, mais je ne le savais pas à l'époque et je voulais document de mon processus. Quand j'ai essayer la méthode de deux, je tombe sur l'erreur suivante lors du débogage:
Contrôle
HiddenTodayDate
référencé par leControlToValidate property
de " CompareEndTodayValidator ne peut pas être validée.Description: Une exception non gérée s'est produite lors de l'exécution de
la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'
informations sur l'erreur et où elle a son origine dans le code.Détails De L'Exception: System.Web.HttpException: Le Contrôle 'HiddenTodayDate'
référencé par la propriété de ControlToValidate de
'CompareEndTodayValidator' ne peut pas être validée.Source De L'Erreur:
Une exception non gérée s'est produite lors de l'exécution de la
demande web actuelle. Informations concernant l'origine et l'emplacement de
l'exception peut être identifié à l'aide de la trace de pile d'exception ci-dessous.
Donc, il y a un moyen de faire en quelque sorte à atteindre mon objectif sans avoir à afficher le type DateTime.Aujourd'hui, quelque part? Je préfère garder mon code aussi simple et propre que possible et ne pas utiliser Javascript, mais si Javascript fournit la seule solution, alors ainsi soit-il. Code serait grandement apprécié. Merci!
Vous devez vous connecter pour publier un commentaire.
Après l'apprentissage de la ValueToCompare bien dû en partie à Tim post, j'ai été en mesure de rechercher et de trouver une question similaire à la mienne avec une réponse qui a presque fonctionné (dû changer ASP.NET comparer le type de Chaîne de caractères):
En utilisant le contrôle CompareValidator de comparer la saisie de l'utilisateur date avec la date d'aujourd'hui
Voici ce que mon code ressemble à ceci:
ASP.NET:
.NET:
(Dans la méthode Page_Load)
Vous pouvez définir la
ValueToCompare
propriété par programme pour aujourd'hui:(pas testé, si
<%=
ne fonctionne pas utiliser<%#
, alors vous devez penser à appelerPage.DataBind()
quelque part(f.e. dansPage_Load
) si elle n'est pas dans un contexte lié aux données)<asp:CompareValidator Id="CompareEndTodayValidator" Operator="LessThan" Type="Date" ControlToValidate="EndDateTextBox" ValueToCompare="<%= DateTime.Today.ToShortDateString() %>" ErrorMessage="The date must be less than today" runat="server" />
, Mais il en résulte une erreur: La valeur '<%= DateTime.Aujourd'hui.ToShortDateString() %> "de la ValueToCompare propriété de CompareEndTodayValidator' ne peut pas être converti en type "Date". À l'aide de %# des résultats dans plusieurs erreurs de build, notamment comme ), ; prévu.