2011-09-01 35 views
0

我想在Page_PreRender上運行一些代碼,但只希望它在某個DIV內的超鏈接上運行。Page_PreRender查找div的id(asp.net VB)

如果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 

CODE我試着

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.

+0

一般來說,該方法似乎是正確的。但是,當您聲明「它似乎沒有工作」時,您不會提供足夠的有關結果的信息。 您的意思是說它不會改變subNav中任何元素的顏色? 或者它也改變了subNav以外的元素? 或者它會給出語法錯誤? 另外,aspx頁面的示例可能很有用。 – Durden81

+0

那麼第一批代碼的作品,但在每個超鏈接上,第二批代碼的問題似乎是,'SubNav'div中的超鏈接不會被迭代,只要我將其更改爲runat =「server」即可。 ..困惑! – JBoom

回答

1

您需要將中用runat =「服務器」標籤添加到div,並給它一個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 

UPDATE 我在一些代碼通過鏈接進行遍歷時,補充說:

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 
+0

不,沒有辦法。我寫出了Pre_Render上的每個NavigateUrl,並且一旦我將div更改爲runat =「server」,它就不包含該div內的鏈接。感謝您的輸入。 – JBoom

+0

你是什麼意思,它不包括該div中的鏈接?如果發生這種情況,代碼有問題。不妨嘗試使用Panel,因爲它無論如何都會輸出一個div。 –

+0

更新了你的答案來解釋 – JBoom