ASPX + VB : Problème de multi enregistrement

Résolu
jcbelgium Messages postés 2 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 août 2009 - 24 août 2009 à 15:16
jcbelgium Messages postés 2 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 août 2009 - 24 août 2009 à 19:37
Bonjour à tous,

J'écris une appli en Visual Web 2005 avec du VB derrière.
J'ai un formulaire complexe avec un bouton "Enregitrer".
Losqu'on clique pour lancer l'enregistrement, il faut un certain temps pour que l'opération se fasse. J'ai constaté que si on recliquait plusieurs fois de suite pendant le traitement, l'insertion s'effectuait plusieurs fois (malheur !).

Comment empecher que l'insertion s'effectue plusieurs fois ? Comment bloquer le bouton après 1 click mais exécuter le processus d'enregistrement en VB ?

J'ai essayé en ajoutant du javascript sur le bouton, "OnClic" "this.disabled=true;" mais dans ce cas l'action du serveur ne s'exécute pas.

J'ai essayé avec un viewstate de type integer.
Mais aucun succes.

if status = 0 then
Status = 1
' ici l'enregistrement
endif

Pouvez-vous m'aider à contourner ce problème ?

Merci d'avance,

JC

1 réponse

jcbelgium Messages postés 2 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 24 août 2009
24 août 2009 à 19:37
Voici comment j'ai résolu le problème :

Dans le programme :

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


        If Page.IsPostBack = False Then
            ' ajoute un OnClientClick temporisé qui grise le bouton 3 milli secondes après le click
            AddOffOnClientClick(btnEnreg)
            ' etc ...
        End If

        ' etc
    End Sub

' cette fonction ajoute une fonction javascript du nom de l'id+Off de l'objet (monbtnOff())
' et qui disable l'objet en question
' ensuite elle initialise OnClientClick de l'objet en question
' pour qu'il execute la fonction javascript apres 3 milli secondes
' (si on disable tout de suite l'action du bouton ne se poursuit pas !)
'
    Public Function AddOffOnClientClick(ByVal Btn As System.Web.UI.WebControls.Button) As String
        Dim name As String
        name = Btn.UniqueID
        Page.ClientScript.RegisterStartupScript(Me.GetType(), name, "function " & name _
             & "off() { document.forms[0]['" & name & "'].disabled = true;" & " }", True)
        name = name & "off()"
        Btn.OnClientClick = "self.setTimeout('" & name & ";' ,3);"
        Return name
    End Function


Merci à Cyril Durand pour son code (Cyril.Controls) qui m'a inspiré.
3
Rejoignez-nous