我的ASP.NET(VB.NET)应用程序使用SiteMaps在每个页面的顶部显示导航菜单。在某些页面的代码中,我正在动态修改SiteMaps节点的URL(将参数添加到URL的末尾),例如说我有some.aspx.vb和anotherPage.aspx.vb,它们都包含以下内容:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler SiteMap.SiteMapResolve, AddressOf Me.ExpandForumPaths
If Not Page.IsPostBack Then
Setup()
End If
End Sub
Private Function ExpandForumPaths(ByVal sender As Object, ByVal e As SiteMapResolveEventArgs) As SiteMapNode
Dim currentNode As SiteMapNode = Nothing
Try
currentNode = SiteMap.CurrentNode.Clone(True)
' Do some stuff
Catch ex As Exception
' Do nothing - don't want app falling over because of issue with nav menu
End Try
Return currentNode
End Function
我的问题是这个,如果我在somePage.aspx背后的代码中,我做了一个Response.Redirect(“〜/ anotherPage.aspx”) - 然后,当加载anotherPage.aspx.vb时,它是somePage.aspx.vb的ExpandFormumPaths方法被命中,而不是anotherPage.aspx.vb。
我的理解是Response.Redirect告诉浏览器对提供的URL做一个新的请求 - 我不知道为什么它会触及属于上一页的方法。
我已经尝试修改方法名称(即在所有类中没有名为ExpandFormumPaths的节点处理方法),但我仍遇到同样的问题。
当我直接访问anotherPage.aspx的URL时,会遇到正确的方法,只有在我使用Response.Redirect时才会发生这种情况。
有什么想法吗?
答案 0 :(得分:0)
您是否尝试过Response.Redirect("~/anotherPage.aspx", true)
? true将结束当前页面的处理,听起来就是这样。
答案 1 :(得分:0)
请检查anotherPage.aspx中@Page指令中的CodeBehind文件。它应该是“anotherPage.aspx.vb”,看起来就是指“somePage.aspx.vb”。
答案 2 :(得分:0)
按顺序排序 - 以防万一其他人有同样的问题。我把它包含在文件后面的相同代码中。
' Remove the site map resolver on unload. Causes all kinds of weird issues if we don't do this.
Private Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload
RemoveHandler SiteMap.SiteMapResolve, AddressOf Me.ExpandForumPaths
End Sub