Странное поведение при использовании ответа.Перенаправление и карты сайта

#.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