以前の 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」ページがセッション状態で正常に保存されます。
ここで、ログイン後に 2 回目に移動すると、セッション状態が正常に設定されますが、セッションが正常に設定された後に呼び出される HandleSiteNode に入るまでに、セッションはまだ URL が「login. aspx」であり、「main.aspx」ではありません
コードの他の場所でこのセッション状態を設定しているわけではありません。それ自体で以前の値に戻っているようです。
クリックしたリンクの数とセッションの設定回数に関係なく、セッション変数は「login.aspx」以外に変更されることはありません
ヘルプ!
編集: 別の奇妙な詳細ですが、AddHandler 行をマスター ページから非マスター ページに移動すると、セッション状態が適切に保存されます。ただし、Addhandler コードをマスター ページの MainContent.Load 関数に移動しようとしても、まだ機能しません。