0

我正在尝试在 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

我正在尝试的代码

    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。

4

1 回答 1

1

您需要向 div 添加一个 runat="server" 标记并为其指定一个 ID。一旦你这样做了,你可以像这样找到 DIV:

编辑:使用面板而不是 DIV,并将超链接控件添加到面板,如下所示:

<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
于 2011-09-01T13:10:39.040 回答