我正在尝试将会话状态存储在母版页中以跟踪以前的 URL。这就是我正在做的
Public Property PreviousPage() As String
Get
Return Session("theprevpage")
End Get
Set(value As String)
Session("theprevpage") = value
End Set
End Property
Private Function HandleSiteNode(ByVal sender As Object, ByVal e As SiteMapResolveEventArgs) As SiteMapNode
Dim currNode As SiteMapNode = SiteMap.CurrentNode.Clone(True)
Dim tempNode As SiteMapNode = currNode
Dim strPrev As String = PreviousPage
' Append parent pages query string back onto the parent's node URL
If Not tempNode.ParentNode Is Nothing Then
If strPrev.Contains("?") Then
tempNode.ParentNode.Url = tempNode.ParentNode.Url + "?" + strPrev.Split("?")(1)
End If
End If
Return currNode
End Function
并在母版页加载功能
If Not IsPostBack Then
AddHandler SiteMap.SiteMapResolve, AddressOf HandleSiteNode
PreviousPage = Request.UrlReferrer.ToString()
End If
现在,这就是奇怪的地方。
第一个页面是一个登录页面,没有调用主加载。登录后进入main.aspx页面,成功将“login.aspx”页面保存为会话状态。
现在,当我登录后第二次导航时,会话状态设置成功,但是当它进入会话设置成功后调用的 HandleSiteNode 时,会话仍然显示 url 是“login. aspx”而不是“main.aspx”
我没有在代码中的其他位置设置此会话状态,它似乎只是自行恢复到以前的值。
无论我单击多少链接以及设置了多少次会话,会话变量都不会更改为“login.aspx”之外的任何其他内容
帮助!
编辑:另一个奇怪的细节,当我将 AddHandler 行从母版页移动到非母版页时,会话状态被正确保存。但是,如果我尝试将 Addhandler 代码移动到母版页 MainContent.Load 函数中,它仍然不起作用