1. Événement
C'est un problème que j'ai ignoré ou pas découvert depuis longtemps. Le problème est le suivant :
Dans une page, lorsqu'il y a un contrôle de validation, lorsque le contrôle Button déclenche l'événement OnClientClick, et que cet événement renvoie vrai et faux, le contrôle de validation deviendra invalide et ne fonctionnera plus. La description spécifique est la suivante :
La page .Net est la suivante :
Copiez le code comme suit :
<form id="form1" runat="serveur">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBoxTest"
ErrorMessage="Ne peut pas être vide" Display="Aucun"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" TargetControlID="RequiredFieldValidator1" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="return confirm('Êtes-vous sûr de vouloir soumettre ?');" />
</div>
</form>
Comme ci-dessus, ajoutez le contrôle de validation RequireFieldValidator à la page afin que la valeur de TextBoxTest ne puisse pas être vide. Lorsque ButtonText soumet la page, l'utilisateur est invité à confirmer si elle doit être soumise. C'est une page très simple et ne semble poser aucun problème. Mais lorsque la valeur de TextBoxTest est vide, le contrôle de validation ne fonctionne pas et la page est soumise avec succès. Quelle en est la raison ?
2. Répondre aux événements
Que se passe-t-il? Tout d'abord, après avoir supprimé l'événement OnClientClick de ButtonTest, le contrôle de vérification a fonctionné. Pourquoi est-ce ? J'ai vérifié le code source de la page et constaté que le contrôle ButtonTest génère le code source suivant :
<input type="submit" name="ButtonText" value="Test" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , , false, false))" id="ButtonText" />
Comme le montre cette ligne de code source, le contrôle de validation génère un morceau de code javascript côté client pour vérifier si la valeur dans TextBox est vide. Après avoir ajouté OnClientClick de ButtonTest, j'ai revérifié le code source généré par le contrôle ButtonTest est le suivant :
<input type="submit" name="ButtonText" value="Test" onclick="return confirm('Êtes-vous sûr de vouloir soumettre ?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , , false, false )) " id="BoutonTexte" />
A partir de cette ligne de code, vous pouvez clairement voir où se situe le problème. Côté client, le javascript personnalisé est d'abord exécuté, puis le javascript généré par le contrôle de validation est exécuté. Évidemment, dans ce cas, le contrôle de validation est perdu. n'importe quel sens.
3. Contrôles de réponse
Une fois que vous saurez où se situe le problème, il sera plus facile à résoudre. Ma solution est la suivante : avant d'exécuter le javascript personnalisé (retournez la confirmation ("Êtes-vous sûr de vouloir soumettre ?"), vérifiez si les contrôles de la page sont conformes aux Rules. J'ai donc modifié l'événement OnClientClick de ButtonTest comme suit :
Copiez le code comme suit :
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="if(CheckClientValidate()) return Confirm('Êtes-vous sûr de vouloir soumettre la page ?');" />
Le code de la méthode CheckClientValidate() est le suivant :
Copiez le code comme suit :
<langage de script="javascript" type="text/javascript">
fonction CheckClientValidate(){
Page_ClientValidate();
si (Page_IsValid){
renvoie vrai ;
}autre{
renvoie faux ;
}
}
</script>
Exécutez, testez. Les contrôles de validation fonctionnent. Problème résolu.
4. Post-scriptum
C'est le problème et la solution que j'ai su ignorer. Quand j'ai découvert ce problème, j'ai eu des sueurs froides. Heureusement, j'ai fait une vérification stricte côté serveur, sinon ce serait misérable. De là, nous pouvons également voir à quel point il est nécessaire de spécifier une vérification stricte côté serveur :-). Cela empêche non seulement les « pirates informatiques » de contourner la vérification des clients, mais empêche également les inexactitudes des données causées par des erreurs qui ne sont pas remarquées par soi-même.
Note:
Page_ClientValidate(), cette fonction est utilisée dans les pages aspx contenant des contrôles de validation Microsoft pour renvoyer True ou False selon que l'opération de saisie utilisateur est légale ou non.
Peut être jugé directement.
Copiez le code comme suit :
si (Page_ClientValidate())
{
renvoie vrai ;
}
autre
{
renvoie faux ;
}