4

我有一个旧应用程序,其中包含许多网络表单。在每一aspx页上都有一个指定的后退按钮,它将用户带到上一页。所有按钮都将 javascriptonclick事件设置为history.back().

在其中aspx一页上,后退按钮根本不起作用。我们决定使用一个服务器端按钮来完成同样的事情。按钮的 onclick 事件具有将用户带到上一页的必要代码。

首先我通过以下方式创建了onclick事件,但是后退按钮根本不起作用。当我进入调试模式时,我发现该prevPage变量保存的是当前页面 URL,而不是前一页面 URL。

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

然后我将其更改prevPage为静态变量,并将其值定义为在if(!IsPostBack)块内设置。现在后退按钮工作正常。

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);
}

我不明白为什么第一次尝试行不通,为什么第二次尝试行不通。

我有一种感觉,这可以解释这个特定页面是否还有其他事情也不会让history.back()orhistory.go(-1)工作。

您能否对此提供一些见解?

编辑:我使用的是 IE8。

4

3 回答 3

4

第一次尝试不起作用,因为当您单击按钮时,回发已经发生,因此引荐来源网址是来自按钮的网址(您所在的页面)。

在我看来,我不会向服务器发送请求以将页面推回一个级别,这是一个不必要的请求,因为它可以在客户端更快地实现。

于 2012-08-17T10:19:33.367 回答
3

伙计,不要使用静态变量来存储以前的 URL。它将在所有会话之间共享,如果您的页面可以从不同的地方实现,用户会感到困惑。如果你想跟踪最后一页,Session是你最好的朋友。

于 2012-08-17T10:35:29.690 回答
1
JavaScript:window.history.go(-2);return false;

这就是您所需要的,将其放入 onclientclick 或简单地放入锚标记中。您需要单击两次,因为第一次单击将带您进入确认提交页面。

于 2014-10-28T13:55:29.760 回答