2011-10-18 2 views
0

J'ai un problème qui me rend fou. Sur ma page j'ai un validation Javascript et deux validateurs ASP.NET. Le résultat de la validation dépend uniquement du résultat du Javascript. Cela signifie que si le Javascript renvoie vrai les validateurs ASP.NET ne sont pas vérifiés.La validation Javascript écrase les validateurs ASP.NET

Le code Javascript est:

<script type="text/javascript"> 

    function Validate() { 
     var ddlObj = document.getElementById('<%=ddStatus.ClientID%>'); 
     var txtObj = document.getElementById('<%=txtComment.ClientID%>'); 
     if (ddlObj.selectedIndex != 0) { 
      if (txtObj.value == "") { 
       alert("Any change of Status requires a comment!"); 
       txtObj.focus(); 
       return false; 
      } 
     } 
    } 
</script> 

Au lieu de cela les deux ASP.NET validateurs sont:

<td><asp:TextBox runat="server" ID="txtSerialNr" ></asp:TextBox> 
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtSerialNr" ErrorMessage="***" /> 
         </td> 

<td><asp:TextBox runat="server" ID="txtProdName" ></asp:TextBox> 
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="txtProdName" ErrorMessage="***"></asp:RequiredFieldValidator></td> 

Tout le monde peut aider? Merci

MISE À JOUR:

j'appelle le Javascript d'un bouton:

<asp:Button runat="server" ID="btnSubmit" Text="Save New Product" 
style="cursor:hand" OnClick="btnSubmit_Click" /> 

Mais j'enregistrer l'attribut du code-behind :

protected void Page_Load(object sender, EventArgs e) 
{ 
    btnSubmit.Attributes.Add("OnClientClick", "return Validate()"); 
} 
+0

@Darin Dimitrov: Merci voir mise à jour – CiccioMiami

Répondre

1

Vous pouvez tirer la validation du côté client à partir de la fonction Validate():

validate = function(){ 
    bool isValid = Page_ClientValidate(""); //triggers validation 
    if (isValid){ 
     var ddlObj = document.getElementById("<%=ddStatus.ClientID%>"); 
     var txtObj = document.getElementById("<%=txtComment.ClientID%>"); 
     if (ddlObj.selectedIndex != 0) { 
      if (txtObj.value == "") { 
       alert("Any change of Status requires a comment!"); 
       txtObj.focus(); 
       isValid = false; 
      } 
     } 
    } 
    return isValid; 
} 

Markup:

<asp:Button runat="server" OnClientClick="return validate();" ... /> 
+0

Votre solution semblait parfaite, mais cela ne fonctionne pas. J'ai essayé plusieurs combinaisons différentes sans succès. Comment puis-je vérifier si Page_ClientValidate renvoie true si je remplis les deux zones de texte gérées par les validateurs ASP.NET? Merci – CiccioMiami

+0

Dans quelle séquence voulez-vous que la validation s'exécute? –

+0

Etes-vous sûr que ce n'est pas un problème de boîtier? Ma fonction s'appelle 'validated' alors que la vôtre est' Validate'.JavaScript est très sélectif sur le boîtier. –

1

OK, il y a un deux choses ne vont pas ici.

Si vous êtes assez préoccupé pour faire la validation, vous devez TOUJOURS faire la validation côté serveur en plus du côté client. La validation côté client est très conviviale et rapide à répondre, mais elle peut être contournée simplement en désactivant JavaScript!

Je ne vois pas où vous avez dit à vos contrôles quelle fonction JavaScript appeler quand ils valident? Vous utilisez RequiredFieldValidators qui ne nécessite pas de fonction externe, mais essayez ensuite une validation personnalisée à l'aide de votre fonction Validate().

Si vous faites finissez en utilisant un CustomValidator, alors vous devrez changer la 'signature' de votre fonction. Il doit être de la forme

function validateIt(sender, args){ 
      var testResult = //your validation test here 
      args.IsValid = testResult; 
     } 
+0

merci pour votre réponse. Je sais qu'il devrait être accompagné par la validation côté serveur, mais celui-ci est beaucoup plus facile à effectuer. Je préfère avoir une validation côté client qui fonctionne et que l'implémentation côté serveur. À propos de votre autre préoccupation, voir ma mise à jour – CiccioMiami

+0

Ce que vous devez faire est d'utiliser un CustomValidator et d'effectuer toutes les validations dans ce domaine. Aucun point ayant un 'RequiredFieldValidator' ET validation personnalisée. – Widor

Questions connexes