Creating a back button in ASP.NET

Animesh picture Animesh · Aug 17, 2012 · Viewed 14.9k times · Source

I have an old application which has numerous webforms. On every aspx page there is a designated back button, which takes the user to the previous page. All the buttons have the javascript onclick event set to history.back().

On one of the aspx pages, the back button would not work at all. We decided to use a server side button that would accomplish the same thing. The onclick event of the button has the necessary code to take the user to previous page.

First I created the onclick event in the following way, but the back button did not work at all. When I went in the debug mode, I found that the prevPage variable was holding the current page URL instead of the previous page URL.

private void btnBack_Click(object sender, System.EventArgs e)
{
    string prevPage = Request.UrlReferrer.ToString();
    Response.Redirect(prevPage);
}

Then I changed the prevPage to a static variable and defined its value to be set inside the if(!IsPostBack) block. Now the back button worked correctly.

static string prevPage = string.Empty;
private void Page_Load(object sender, System.EventArgs e)
{
    if(!IsPostBack)
    {
        prevPage = Request.UrlReferrer.ToString();
    }
}

private void btnBack_Click()
{
    Response.Redirect(prevPage);
}

I did not understand why the first attempt wouldn't work and why second attempt would.

I have a feeling that this might explain if there is something else going on with this particular page that would also not let the history.back() or history.go(-1) work.

Can you please provide some insight into this?

Edit: I am using IE8.

Answer

Darren picture Darren · Aug 17, 2012

The first attempt would not work because when you click the button the post back has already occurred, therefore the Referrer URL is the one coming from the button (The page you are on).

In my opinion I would not send a request to the server to push the page back a level, it's an unnecessary request when it could be achieved quicker on the client side.