Recently while working on one of my .NET application I was stuck in a strange problem. I created a button and its click event to insert some entry in database and at the end of this action I used below statement to redirect the page for next step.
Response.Write("<script>top.location="next step page url";</script>");
=&0=& I used this method to redirect the page because I was doing it in an iframe and wanted to redirect parent page after this step is completed and next step is started.
This was working perfectly fine but after moving to next step when I clicked browser back button same action was again fired and I got two similar entries in database. This was strange because I never exacted post event to be actually fired on browser back button because browser used to show a message when there is any post action is required (like we tap browser refresh button after any post action).
After some hit and trial I found that the statement above (Response.Write) is causing the issue. This was because the post action was still in progress because I used a trick to redirect instead of simple Response.Redirect.
To complete the post event and redirect properly to resolve the page postback issue on browser back button I used below approach in place of above like of statement:
Session["next"] = true
On parent page I checked if this session exists then redirect to next step
if(Session["next"] != null && Convert.ToBoolean(Session["next"]))
Response.Redirect("next step page url");
After this approach when I clicked browser back button there was not issue of postback.
So the conclusion was that Response.Write was actual reason of the issue because it was breaking the flow without completing the post action.