jcbelgium
Messages postés2Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 août 2009
-
24 août 2009 à 15:16
jcbelgium
Messages postés2Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 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
jcbelgium
Messages postés2Date d'inscriptionlundi 5 novembre 2007StatutMembreDernière intervention24 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é.