2

以前の 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 関数に移動しようとしても、まだ機能しません。

4

2 に答える 2

1

SiteMapResolveは静的イベントです。

これは、セッションオブジェクトにアクセスできないことを意味します。HandleSiteNodeコードにブレークポイントを設定し、Session.SessionIdプロパティを調べると、これに注意できます。

イベントに関するMSDNの例はすべて、global.asaxファイルを対象としています。これは、ハンドラーが実際にサイトの1回の使用を対象としていることを意味します。私がリンクしたMSDNの例は、ページが読み込まれるたびに新しいイベントをアタッチするという点で少しジャックされていることに注意してください。これにより、メモリが消費されます。イベントは一度だけ添付する必要があります。

問題を回避するための潜在的な方法の詳細については、ここをクリックしてください。

于 2013-01-15T18:50:58.393 に答える
1

どうやら、私のWebプロジェクトには少なくとも2つの異なるセッション状態があります。

を使用して、必要な値を含むセッション状態にアクセスできます

e.Context.Session("theprevpage")

これはちょっとしたハックのように思えますが、私にとってはうまくいっています。

于 2013-01-16T15:40:46.540 に答える