#.net #asp.net #vb.net
#.net #asp.net #vb.net
Вопрос:
Мой ASP.NET (VB.NET ) приложение использует карты сайта для отображения меню навигации в верхней части каждой страницы. В коде некоторых страниц я динамически изменяю URL-адреса узлов SiteMaps (чтобы добавить параметры в конец URL-адреса), например, скажем, у меня есть somePage.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 и делаю ответ.Перенаправление («~/anotherPage.aspx») — затем, когда загружается anotherPage.aspx.vb, попадает метод ExpandFormumPaths somePage.aspx.vb, а не метод anotherPage.aspx.vb.
Насколько я понимаю, это ответ.Перенаправление сообщает браузеру выполнить новый запрос на указанный URL-адрес — я не знаю, почему он попадает в метод, принадлежащий предыдущей странице.
Я попытался изменить имена методов (т. Е. Во всех классах не было метода обработки узла с именем ExpandFormumPaths), но я все равно столкнулся с той же проблемой.
Когда я перехожу прямо к URL-адресу anotherPage.aspx, отображается правильный метод, только когда я использую Response .Перенаправьте, что это происходит.
Есть идеи?
Ответ №1:
Вы пробовали делать Response.Redirect("~/anotherPage.aspx", true)
? Истина заключается в завершении обработки текущей страницы, что, похоже, и происходит.
Комментарии:
1. Спасибо за ответ. Я уже пробовал это, но все равно получаю тот же результат.
Ответ №2:
пожалуйста, проверьте файл CodeBehind в директиве @Page в anotherPage.aspx. Это должно быть «anotherPage.aspx.vb», похоже, что это относится к «somePage.aspx.vb».
Комментарии:
1. Спасибо за ответ. Нет, это установлено правильно. Как я уже сказал в вопросе, это работает, когда я перехожу на страницу напрямую, только когда я делаю ответ. Redirect(), что я получаю такое поведение.
Ответ №3:
Кстати, я отсортировал это — на всякий случай, если у кого-то еще есть такая же проблема. Я включил это в тот же код, что и files .
' 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