Verifier une checkbox par un validator - CustomValidator
Qui n'a jamais eu à vérifier que l'utilisateur coche bien une checkbox avant de cliquer sur un bouton ? Vous savez, la CheckBox qui contient "En cochant cette case j'accepte les conditions".
Aussi étonnant que cela puisse paraitre, les contrôles de validations ASP.net ne peuvent pas vérifier cette condition, ni même le RequiredFielValidator. Il faut pour cela utiliser un CustomValidator qui se charge de valider à la fois côté client grâce à une fonction JavaScript ET côté serveur. Pour cela il faut tout d'abord renseigner la propriété ClientValidationFunction qui doit contenir le nom de la fonction JavaScript vérifiant la validité du formulaire puis s'abonner à l'événement ServerValidate qui permet de vérifier la validité côté serveur. Bien souvent la validation côté serveur est oubliée, sur nos machines JavaScript s'occupe de la validation. Ne pas valider côté serveur est une faille de sécurité; les personnes mal-intentionnés n'ont que faire de la validation JavaScript, c'est amusant mais cela ne protège absolument pas, le seul but de la propriété ClientValidationFunction est que l'application soit plus interactif.
<script type="text/javascript">
var validateAcceptCondition = function(source, args){
args.IsValid = $get('<%=cbAcceptCondition.ClientID%>').checked;
}
</script>
<asp:CustomValidator ID="cvAcceptCondition" runat="server"
ClientValidationFunction="validateAcceptCondition"
Text="Vous devez accepter les conditions" ValidationGroup="Condition" />
<asp:CheckBox ID="cbAcceptCondition" runat="server"
Text="En cochant cette case, j'accepte les conditions ci-dessus"
ValidationGroup="Condition" />
Protected Sub cvAcceptCondition_ServerValidate(ByVal source As Object, _
ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles cvAcceptCondition.ServerValidate
args.IsValid = cbAcceptCondition.Checked
End Sub
Enfin, lors du click sur le bouton il ne faut pas oublier de vérifier la validité du formulaire, là aussi c'est trop souvent oublié car la validation est faite côté client via JavaScript sur nos machines.
Page.Validate("Condition")
If Page.IsValid Then
' do something here
End If
Si l'on n'appelle pas la méthode Page.Validate alors Page.IsValid se rapportera sur tous les groupes de validations du formulaire. En appellant cette méthode, Page.IsValid se rapportera seulement au groupe de validation demandé.
ASP.net fourni des contrôles de validation qui permet de s'assurer que l'utilisateur ne saisit pas des données stupides ou dangereuses, encore faut il ne pas oublier de vérifier la validité du formulaire ...
Pour rappel, les contrôles de validations ne sont pas officiellement supporté par ASP.net Ajax. Si vous les utilisez à l'intérieur d'un UpdatePanel je vous conseille de lire ce post : Validator et UpdatePanel