When the user hits the refresh button they are typically prompted by the
browser. The prompt informs them that if they click ‘yes’ (or is it ‘ok’?)
that what the browser will do is execute the last thing the user did to get
the page. If the past thing the user did was click the Add button, then that’s
what it will do. Unfortunately this is a user education issue.
There are some things you can do to remove this possibility, such as a Response.Redirect
back into the same page so that it reloads itself from scratch without the
POST sideeffects, but since you’re dynamically adding controls in the postback
I think you’re going to have a hard time.