Page_PreRender находит div по идентификатору (asp.net VB) - PullRequest
0 голосов
/ 01 сентября 2011

Я пытаюсь запустить какой-то код на Page_PreRender, но хочу, чтобы он запускался только по гиперссылкам в пределах определенного DIV.

Код выполняет изменение цвета гиперссылки, если NavigateUrl = URL-адресстраница, на которой находится пользователь.

У меня есть код, который работает, но он меняет цвет каждой ссылки на странице, которая соответствует, когда я хочу, чтобы это происходило только в пределах определенного div.

DIV ID Я хочу, чтобы гиперссылки были изменены в 'subNav'

ТЕКУЩИЙ КОД

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

        Dim filePath As String = "/~" & System.Web.HttpContext.Current.Request.Path

        Dim strControlType As String
        For Each ctrl As Control In Me.Controls
            For Each subctrl As Control In ctrl.Controls
                strControlType = Convert.ToString(subctrl.[GetType]())
                If strControlType = "System.Web.UI.WebControls.HyperLink" Then
                    If filePath = "/" & DirectCast(subctrl, HyperLink).NavigateUrl Then
                        'DirectCast(subctrl, HyperLink).CssClass = "active"
                        DirectCast(subctrl, HyperLink).Attributes.Add("style", "color:#993366")
                        'Label2.Text = "/" & DirectCast(subctrl, HyperLink).NavigateUrl
                    End If

                End If
            Next
        Next

    End Sub

КОД IM TRYING

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

    Dim filePath As String = "/~" & System.Web.HttpContext.Current.Request.Path

    Dim strControlType As String

    Dim subNavDiv As HtmlControl = CType(FindControl("subNav"), HtmlControl)
    For Each ctrl As Control In subNavDiv.Controls
        For Each subctrl As Control In ctrl.Controls
            strControlType = Convert.ToString(subctrl.[GetType]())
            If strControlType = "System.Web.UI.WebControls.HyperLink" Then
                If filePath = "/" & DirectCast(subctrl, HyperLink).NavigateUrl Then
                    'DirectCast(subctrl, HyperLink).CssClass = "active"
                    DirectCast(subctrl, HyperLink).Attributes.Add("style", "color:#993366")
                    'Label2.Text = "/" & DirectCast(subctrl, HyperLink).NavigateUrl
                End If

            End If
        Next
    Next

End Sub

Не уверен, что это путьоб этом или нет, но, похоже, он не работает.

Спасибо за любую помощь.

J.

1 Ответ

1 голос
/ 01 сентября 2011

Вам нужно будет добавить тег runat = "server" в div и присвоить ему идентификатор.Как только вы это сделаете, вы можете найти DIV следующим образом:

EDIT : используйте Panel вместо DIV и добавьте элементы управления HyperLink на Panel, например:

<asp:Panel ID="pnlLinks" runat="server">
    <asp:HyperLink ID="lnk1" runat="server" Text="Link 1" />
    <asp:HyperLink ID="lnk2" runat="server" Text="Link 2" />
</asp:Panel>

Затем в вашем коде выполните следующее:

For Each lnk As HyperLink In pnlLinks.Controls.OfType(Of HyperLink)()
    lnk.NavigateUrl = "/somefolder/somepage.aspx"
Next

ОБНОВЛЕНИЕ Я добавил некоторый код при переборе ссылок:

Response.Write(DirectCast(subctrl, HyperLink).NavigateUrl & "<br />")

Но когдаЯ добавил runat = "server" в div. Гиперссылки, которые я внутри div больше не записывали.

UPDATE2 Пришел с вашей помощью, бит панели определенно сработал, спасибо.Окончательный код:

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

    Dim filePath As String = "/~" & System.Web.HttpContext.Current.Request.Path

    For Each lnk As HyperLink In subNav.Controls.OfType(Of HyperLink)()
        If filePath = "/" & lnk.NavigateUrl Then
            DirectCast(lnk, HyperLink).CssClass = "active"
        End If
    Next

End Sub
...