2009-07-20 7 views
2

J'ai un usercontrol dans ASP.Net avec un bouton que j'utilise pour la publication. Ce bouton a également une validation Javascript qui est faite avant de traiter l'événement.ASP.Net PostbackURL ne fonctionne pas si je mets en Javascript Validation

Aujourd'hui, j'ai essayé de publier sur une autre URL en définissant la propriété PostBackURL du bouton. Mais cela n'a pas fonctionné et la page a continué à s'afficher. J'ai donc fait une enquête et trouvé ça.

  1. Le retour à une autre URL est implémenté via Javascript dans ASP.Net.
  2. Si je garde l'appel à ma fonction de validation

    OnClientClick = "validate return()" Ensuite, le poste ne se produit pas.

  3. Si je supprime l'appel à la fonction de validation, la publication fonctionne correctement.

Voici comment le balisage de bouton apparaît lorsque la validation est activée.

<input type="submit" name="ctl00$cphMain$pra1$btnSubmit" value="Submit" onclick="return validate();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphMain$pra1$btnSubmit&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Result.aspx&quot;, false, false))" id="ctl00_cphMain_pra1_btnSubmit" style="width:80px;" /> 

Sans validation

<input type="submit" name="ctl00$cphMain$pra1$btnSubmit" value="Submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphMain$pra1$btnSubmit&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Result.aspx&quot;, false, false))" id="ctl00_cphMain_pra1_btnSubmit" style="width:80px;" /> 

Vous remarquerez que l'appel à « valider de retour() » est absent, et qui fait toute la différence.

Comment puis-je faire fonctionner cela?

Répondre

2

car le return empêche l'exécution de WebForm_DoPostBackWithOptions, quel que soit le résultat de la validation.

vous pouvez essayer (sans les guillemets):

"!validate() ? return false : " 

cette façon, il finirait comme:

!validate() ? return false : WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphMain$pra1$btnSubmit&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Result.aspx&quot;, false, false)) 

un hack brut, mais c'est WEBForms pour vous, une grande entaille au-dessus de un autre.

+0

Je préfère code javascript qui fonctionnerait autonome. Un peu moins d'un hack car il ne repose sur aucune hypothèse sur la façon dont il est utilisé. – tvanfosson

+0

Droit! Merci pour la solution. –

13

Remplacer

OnClientClick="return validate();" 

avec

OnClientClick="if (!validate()) { return false; }" 
+0

Merci tvanfosson! –

+0

convenu, c'est une solution plus propre. –