2011-08-04 17 views
2

我有一個看起來像幾個環節如下:ASP.NET的WebForms C#如果URL是一樣的超級鏈接添加

<ul> 
    <li><asp:HyperLink ID="lnk1" NavigateUrl="~/section/sub-section/page1" runat="server">My Link</asp:HyperLink></li> 
    <li><asp:HyperLink ID="lnk2" NavigateUrl="~/section/sub-section/page2" runat="server">My Link</asp:HyperLink></li> 
</ul> 

我想要做的就是在代碼背後,是添加一個類的選擇如果鏈接網址與當前正在查看的網頁的網址匹配。

我該怎麼做?謝謝

+0

那你試試這樣遠? –

+0

沒有試過任何東西,因爲我不知道C#特別好 – Cameron

回答

1

放置在面板的超鏈接這樣

<asp:Panel id="pnl" runat="server"> 
<ul> 
    <li><asp:HyperLink ID="lnk1" NavigateUrl="~/section/sub-section/page1" runat="server">My Link</asp:HyperLink></li> 
    <li><asp:HyperLink ID="lnk2" NavigateUrl="~/section/sub-section/page2" runat="server">My Link</asp:HyperLink></li> 
</ul> 
</asp:Panel> 

然後在後面的迭代次代碼粗略每個HyperLink控件:

foreach (Control lnk in pnl.Controls) 
     { 
      if (lnk is HyperLink) 
      { 
       HyperLink href = (HyperLink)lnk; 
       if (Request.Url.AbsoluteUri.Equals(href.NavigateUrl))     
        href.Attributes.Add("class", "selected");     
      } 
     } 

希望這將有助於..

+0

我有多個鏈接,因此爲每個鏈接傳遞ID並不理想......我怎樣才能獲得鏈接列表? – Cameron

+0

要麼將​​所有的鏈路佔位符或面板,然後通過子控件迭代: 的foreach(在p.Controls控制LNK)// p是面板 { 的ID,如果(LNK是LinkBut​​ton的) { 的LinkBut​​ton lbtn =( LinkBut​​ton的)LNK;如果(Request.Url.AbsoluteUri.Equals(lbtn.NavigateUrl)) lbtn.Attributes.Add(「class」,「selected」); } } – Waqas

+0

你能舉個例子嗎?我想要的頁面和我在代碼背後的內容。感謝 – Cameron

0

在Page.Request對象中,您確實具有獲取當前頁面的RawUrl的屬性,在Page.Controls中執行循環,您可以找到所有超鏈接,然後可以將NavigateUrl屬性與頁面進行比較網址和你設置。

請記住,如果你想從代碼更改服務器控件的屬性後面你最好只在Page_PreRender方法做到這一點,因爲如果你在你改變之前可能會被覆蓋......

0

你可以母版頁上得到當前文件名

string currentpage = Request.FilePath; 
0

它會是這樣的(你需要tweek的equality比較):

if (Request.Url.AbsoluteUri == lnk1.NavigateUrl) { lnk1.Attributes.Add("class", "selected"); } 
+0

我有多個鏈接,因此爲每個鏈接傳遞ID並不理想......我如何才能獲得鏈接列表? – Cameron

+0

我看到了 - 那麼我會推薦'foreach'所有的頁面控制類型爲'HyperLink'。 –