How to stop users from clicking buttons more than once?

  • Thread starter Thread starter Brent
  • Start date Start date
B

Brent

I have a C# asp.net page that when you click a button, it writes a record
(based on entered values) to the database. I've found that if you click the
button multiple times quickly, multiple records are written. What is the
best way to deal with this? The page takes a few seconds to process after
the button is clicked so it doesn't reach the point to be reloaded with the
button disabled. I tried disabling it with Javascript, but then the server
side events didn't fire. I tried setting a session variable as soon as the
button was clicked and only running the code if the variable was not set,
but that didn't work either. What is the best way to do this?
Thanks,
 
A possible way to do this would be to have some client JavaScript that
onSubmit :
- hides the form
- shows a DIV (that basically contains a "Processing. Please wait..."
message)

Patrice
 
Hi Brent,

Brent said:
I have a C# asp.net page that when you click a button, it writes a record
(based on entered values) to the database. I've found that if you click the
button multiple times quickly, multiple records are written. What is the
best way to deal with this? The page takes a few seconds to process after
the button is clicked so it doesn't reach the point to be reloaded with the
button disabled. I tried disabling it with Javascript, but then the server
side events didn't fire. I tried setting a session variable as soon as the
button was clicked and only running the code if the variable was not set,
but that didn't work either. What is the best way to do this?
Thanks,

One way to do this would be to generate a unique ID (i.e. Guid.NewGuid)
and put it in the view state of the page. Create a table to keep track of
the unique IDs. When the page is posted, get the unique ID from the view
state and verify that it isn't in the table. If it isn't in the table, add
it to the table and process normally. If it is already in the table, don't
do any processing.

Regards,
Daniel
 
One technique I used was to write some client-side JavaScript that made the
button invisible as soon as it was clicked. You can't click what you can't
see...
 
Just to update, how I did this, was to use a session variable.
Session["adding_started"]=true until processing is done. Then on button
click, check if it is true, if so, don't do anything. Easiest way I think.
 
But there's still a risk that the second request could be buffered long
enough for the server to complete its task, in which case you will still get
2 or more executions.

You said that disabling or making the button invisible using client-side
scripting didn't work... why not?

--
John Wood
EMail: first name, dot, last name, at priorganize.com

Brent said:
Just to update, how I did this, was to use a session variable.
Session["adding_started"]=true until processing is done. Then on button
click, check if it is true, if so, don't do anything. Easiest way I think.

Ken Cox said:
One technique I used was to write some client-side JavaScript that made the
button invisible as soon as it was clicked. You can't click what you can't
see...
 
Well, seems to be good enough anyway... I tapped the button as fast as I
could, and it didn't write 2 records, so no worries. I don't think I was
doing the client side correctly. It would disable it and then not process
anything. Oh well though, this seems to work "good enough". We'll see I
guess...

John Wood said:
But there's still a risk that the second request could be buffered long
enough for the server to complete its task, in which case you will still get
2 or more executions.

You said that disabling or making the button invisible using client-side
scripting didn't work... why not?

--
John Wood
EMail: first name, dot, last name, at priorganize.com

Brent said:
Just to update, how I did this, was to use a session variable.
Session["adding_started"]=true until processing is done. Then on button
click, check if it is true, if so, don't do anything. Easiest way I think.

Ken Cox said:
One technique I used was to write some client-side JavaScript that
made
the
button invisible as soon as it was clicked. You can't click what you can't
see...


I have a C# asp.net page that when you click a button, it writes a record
(based on entered values) to the database. I've found that if you click
the
button multiple times quickly, multiple records are written. What is the
best way to deal with this? The page takes a few seconds to process after
the button is clicked so it doesn't reach the point to be reloaded with
the
button disabled. I tried disabling it with Javascript, but then the server
side events didn't fire. I tried setting a session variable as soon
as
the
button was clicked and only running the code if the variable was not set,
but that didn't work either. What is the best way to do this?
Thanks,
 
I was really thinking about a low-bandwidth line, like dial-up perhaps. But
if you're satisfied...

--
John Wood
EMail: first name, dot, last name, at priorganize.com

Brent said:
Well, seems to be good enough anyway... I tapped the button as fast as I
could, and it didn't write 2 records, so no worries. I don't think I was
doing the client side correctly. It would disable it and then not process
anything. Oh well though, this seems to work "good enough". We'll see I
guess...

John Wood said:
But there's still a risk that the second request could be buffered long
enough for the server to complete its task, in which case you will still get
2 or more executions.

You said that disabling or making the button invisible using client-side
scripting didn't work... why not?

--
John Wood
EMail: first name, dot, last name, at priorganize.com

Brent said:
Just to update, how I did this, was to use a session variable.
Session["adding_started"]=true until processing is done. Then on button
click, check if it is true, if so, don't do anything. Easiest way I think.

One technique I used was to write some client-side JavaScript that made
the
button invisible as soon as it was clicked. You can't click what you can't
see...


I have a C# asp.net page that when you click a button, it writes a record
(based on entered values) to the database. I've found that if you click
the
button multiple times quickly, multiple records are written. What
is
the
best way to deal with this? The page takes a few seconds to process
after
the button is clicked so it doesn't reach the point to be reloaded with
the
button disabled. I tried disabling it with Javascript, but then the
server
side events didn't fire. I tried setting a session variable as
soon
 
Back
Top