0

Page_PreRenderでコードを実行しようとしていますが、特定のDIV内のハイパーリンクでのみ実行したいと考えています。

このコードは、NavigateUrl =ユーザーが表示しているページのURLの場合、ハイパーリンクの色を変更します。

動作するコードがいくつかありますが、特定のdiv内でのみ発生させたい場合に、一致するページ上のすべてのリンクの色が変更されます。

ハイパーリンクを変更したいDIVIDは「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

CODE 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。

4

1 に答える 1

1

runat="server" タグを div に追加して ID を指定する必要があります。これを行うと、次のように DIV を見つけることができます。

EDIT : DIV の代わりに Panel を使用し、次のように 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
于 2011-09-01T13:10:39.040 に答える