2009-06-14 4 views
1

J'ai créé un validateur personnalisé pour les caractères maximum pour une zone de texte multiligne dans ASP.Net.La validation du validateur personnalisé ne se déclenche pas pour la zone de texte

est Ci-dessous le code que j'utilise.

<asp:CustomValidator ID="cvPersonality" runat="server" ControlToValidate="txtPersonality" 
    Display="Dynamic" ErrorMessage="*Maximum Characters 200" 
    OnServerValidate="cvPersonality_ServerValidate"></asp:CustomValidator> 

Protected Sub cvPersonality_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) 
    Dim strDesc As String = Me.txtPersonality.Text 
    If Len(strDesc) > 200 Then 
    args.IsValid = False 
    Else 
    args.IsValid = True 
    End If 
End Sub 

Merci

Répondre

6

Vous pouvez utiliser le code suivant pour une validation côté client, en complément le côté serveur. La validation côté client est utile dans certains cas simples (comme la longueur maximale du texte), car elle réduit la surcharge du serveur, il n'y a pas de publication redondante juste pour une vérification simple. Code ExEmPlE:

<script type="text/javascript"> 
    function clientValidate(sender, args) { 
     if (args.Value.length > 200) { 
      args.IsValid = false; 
     } 
    } 
</script> 

<div> 
    <asp:TextBox runat="server" ID="TextBox1" TextMode="MultiLine"></asp:TextBox> 
    <asp:CustomValidator runat="server" ID="CustomValidator1" ControlToValidate="TextBox1" 
     Text="The text length exceeds the allowed maximum" 
     ClientValidationFunction="clientValidate" Display="Dynamic"> 
    </asp:CustomValidator> 
    <asp:RequiredFieldValidator runat="server" ID="ReqFieldValidator1" ControlToValidate="TextBox1" 
     Text="You must enter a text!" Display="Dynamic"> 
    </asp:RequiredFieldValidator> 
    <asp:Button runat="server" ID="Button1" Text="Postback" CausesValidation="true" /> 
</div> 

S'il vous plaît, faites attention à la RequiredFieldValidator, est de faire en sorte qu'il y est du texte entré dans la zone de texte. Pour une raison quelconque, CustomValidator n'est pas intercepté lorsque args.Value.length == 0;

+0

Merci, c'est génial. – xtrabits

+0

par ailleurs, au lieu d'un CustomValidator vous pouvez utiliser RegularExpressionValidator avec ValidateExpression réglé sur « \ w {1200} » où \ w signifie un caractère de mot et {1200} signifie une longueur de 1 à 200 symboles. –

+0

Le CustomValidator ne fonctionne pas avec une valeur vide. Informations importantes, et énoncées dans la documentation aussi, j'avoue - vous avez fait ma journée! –

3

Tout d'abord, comment savez-vous que le validateur ne se déclenche pas. Avez-vous débogué l'application et vérifié si la méthode cvPersonality_ServerValidate() est appelée?

Deuxièmement, vous n'avez pas un validateur côté client et par conséquent, il ne fera que le feu quand il y a un postback.

Troisièmement, en regardant le balisage, il vous ressemble seulement avez la propriété ErrorMessage mis en place. Cela s'affiche uniquement si vous avez un contrôle ValidationSummary sur la page. Vous devez également définir la propriété de texte ou quelque chose à afficher dans la balise de balisage pour le validateur, généralement un asterik comme indiqué ci-dessous:

<asp:CustomValidator ID="cvPersonality" runat="server" 
    ControlToValidate="txtPersonality" 
    Display="Dynamic" ErrorMessage="*Maximum Characters 200" 
    OnServerValidate="cvPersonality_ServerValidate">*</asp:CustomValidator> 
+0

Je suis très nouveau à tout cela, s'il y a une meilleure façon de le faire, je suis ouvert aux suggestions. – xtrabits

+0

En ajoutant l'astérisque comme indiqué ci-dessus, le voyez-vous lorsque vous cliquez sur le bouton Soumettre et que le texte dépasse 200 caractères? –

4

vous devez ajouter le code suivant à votre bouton de soumission:

if (!Page.IsValid) 
    return; 

la validation personnalisée est par défaut un contrôle de validation du serveur et vous devez arrêter le traitement si les validateurs page ne sont pas valides.

28

Rappelez-vous de définir cette propriété sur la CustomValidator ...

ValidateEmptyText="True" 
+0

Oh mon garçon. J'oublie toujours ça! – Colin

+0

Merde, merci! Vous n'avez aucune idée de combien de temps j'ai regardé ce stupide validateur personnalisé. – hanesjw

+0

Or pur !!!! Merci. –

Questions connexes