单击浏览器[BACK]按钮后恢复会话变量

时间:2011-07-18 15:07:16

标签: asp.net session-variables restore back-button

我的浏览器[BACK]按钮出现问题。让我解释一下。

有一个名为ManageClient.aspx的页面。该页面包含[子]客户端地址(子级意味着您正在查看的客户端)和父级客户端地址(子级继承的客户端)的地址列表。当有人点击在ManageClient.aspx页面中查看客户端时,没有查询字符串(但我确实添加了一个变量来修复我的问题)。但是,对于某些JavaScript,会有一个名为Session(“Id”)的会话变量最终在ManageClient.aspx页面中设置。

当用户点击ManageClient.aspx页面上的地址时,它们将被带到AddressEditor.aspx页面,并且会传递查询字符串中的“Id”变量,指示地址ID。

地址编辑器中的超链接已经破坏了很长时间。这是我的目标 - 修复它们,以便AddressEditor.aspx填充正确的客户端。因此,为了尝试解决这个问题,我在ManageClient.aspx页面中添加了一个名为“Id”的查询字符串变量。此“Id”变量表示您正在编辑的客户端的客户端ID。此外,我还在AddressEditor.aspx页面中添加了一个名为“ClientId”的查询字符串变量。因为客户端AddressEditor与ManageClient.aspx页面在同一个Wizard工作流程中,所以我需要设置“ClientId”查询字符串参数,这样当我到达AddressEditor.aspx页面时,我就可以设置Session(“ClientId”)会话变量,以便如果用户继续在该客户端的向导中,它们处于正确的上下文中。这很有效。

什么不起作用是当用户进入[child]客户端的ManageClient.aspx页面,然后单击父客户端地址(在父客户端的上下文中将它们发送到AddressEditor.aspx),并且然后单击[BACK]按钮(将它们发送回ManageClient.aspx页面)。我希望他们回到子客户端的上下文,而不是父客户端。我在ManageClient.aspx Page_PreRender事件中放了一个断点,实际上它确实被调用了。但是当页面呈现时,页面将填充父客户端,而不是子客户端。但是,如果我突出显示URL栏,并点击[ENTER],页面将呈现为子客户端(AWESOME),因此它必须正确填充我的会话变量作为子客户端(但呈现不正确),但我希望它能够执行此操作当他们点击[BACK]按钮时。如何修复我刚刚描述的此工作流的ManageClient.aspx页面?

以下是Page_PreRender事件:

Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender

    Dim clientId As Integer = CType(Request.QueryString("ClientId").ToString, Integer)
    If clientId > 0 Then
        Session("ClientId") = clientId
        Me.LIMSClientId = clientId
    End If

End Sub

1 个答案:

答案 0 :(得分:1)

这很简单。页面中的列表是在Page_Load中构建的,该页面是在Page_PreRender之后调用的 - 其中设置了会话变量。我只需将我在Page_PreRender事件中的代码放在构建页面中数据列表的代码之上。