Bonsoir,

Nous sommes actuellement en framework 1.1 (donc pas de OnClientClick...) et j'aimerais gérer sur un panier (présenté sous forme de Datagrid) la fonctionnalité suivante :
- lorsque l'utilisateur saisi un code promotionnel, je contrôle par le biais d'un appel ajax la validité dudit code. S'il est valide, je l'applique à mon panier et je recharge la page avec les montants recalculés.

Ca donne cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
<script runat="server">
(...)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    If Not IsPostBack Then
        ActiverPromotion.Attributes.Add("onclick", "checkForDiscount();")
    End If
End Sub
</script>
(...)
<script type="text/javascript">
function checkForDiscount() {
    alert("appel checkForDiscount");
    var retour;
    $.ajax({
        type: "GET",
        url: "../includes/js/AJAX.aspx",
        data: { ajax: "discount", code: $("#CodePromo").val() },
        dataType: "html",
        success: function(result){
            if(result.substring(0, 1) == "#") {
                $("#erreur").html(result.substring(1));
                $("#erreur").show("highlight");
 
                retour = false;
            }
            else {
                $("#promo").html(result);
                $("#promo").show("highlight");
                delay(5000);
                retour = true;
            }
        },
        complete: function(){
            $("#CodePromo").val("");
        }
    });
    return(retour);
}
</script>
(...)
<body>
(...)
<asp:TextBox ID="CodePromo" runat="server"/>                          
<asp:ImageButton ID="ActiverPromotion" ImageUrl="img/btn-activer.jpg" runat="server" OnClick="ActiverPromotion_Click" />
(...)
</body>
Le problème : à l'exécution j'ai l'impression qu'il recharge d'abord la page, puis exécute le code serveur et donc mon code client est shunté.

Quand je regarde le code HTML généré sur le bouton, j'ai ceci :
<input type="image" name="ActiverPromotion" onclick="checkForDiscount(); if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="ActiverPromotion" src="img/btn-activer.jpg">
qui laisse pourtant présager que le checkForDiscount s'exécute bien AVANT le code serveur ? D'ailleurs si je rajoute un delay après l'appel du checkForDiscount, j'ai bien ma msgbox qui s'affiche, mais la suite du code est "omise".
A part gérer mon évènement client sur le onblur de ma zone de saisie, y a-t-il un moyen de lui spécifier d'effecuter la partie Page_ClientValidate uniquement si checkForDiscount() retourne true et ensuite de traitement l'évènement ActiverPromotion_Click ?