asp.net - .NET 母版页 session 状态变量未保存

标签 asp.net session master-pages session-variables session-state

我正在尝试将 session 状态存储在母版页中以跟踪以前的 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”页面保存在 session 状态中。

现在,当我登录后第二次导航时, session 状态已成功设置,但是当它进入 session 设置成功后调用的 HandleSiteNode 时, session 仍然显示 url “login.aspx”而不是“main.aspx”

我没有在代码中的其他位置设置此 session 状态,它似乎只是自行恢复到之前的值。

无论我点击多少个链接以及设置多少次 session ,Session 变量都不会更改为除“login.aspx”之外的任何其他内容

救命!

编辑:另一个奇怪的细节,当我将 AddHandler 行从母版页移动到非母版页时, session 状态被正确保存。但是,如果我尝试将 Addhandler 代码移至母版页 MainContent.Load 函数中,它仍然不起作用

最佳答案

SiteMapResolve 是静态事件。

这意味着它无权访问 session 对象。如果您在 HandleSiteNode 代码中放置断点并检查 Session.SessionId 属性,您会注意到这一点。

examples on MSDN关于该事件的所有目标都是 global.asax 文件,这意味着处理程序实际上适合该站点的单次使用。请注意,我链接到的 MSDN 示例有点夸张,它会在每次页面加载时附加一个新事件,这会消耗内存。该事件只能附加一次。

Click here有关解决这些问题的潜在方法的更多信息。

关于asp.net - .NET 母版页 session 状态变量未保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343869/

相关文章:

javascript - 将脚本应用于项目中的所有页面

asp.net - 如何从子页面更改母版页面中的 Div 类

c# - 在基本母版页中设置标题

php - 成员(member)专区

c# - 类似的母版页,DRY 的最佳方式?

c# - ASP.NET 网站在本地构建,但在构建服务器上抛出 MSB3268

asp.net - 无法访问 IIS 元数据库

html - 为什么文本悬停在我的 asp.net 元素上不起​​作用?

session - 配置两个cxf jaxrs客户端以使用相同的 session (cookie)

ruby - Rack::Session::Pool 与 Sinatra