2012-02-04 54 views
1

我有這樣的FindControl導致空引用

<div id="menu_container"> 
      <ul id="nav-bar"> 
       <li><a href="Default.aspx" runat="server" id="menu_item_default">Home</a></li> 
       <li><a href="Account.aspx" runat="server" id="menu_item_account" >Account</a></li> 
       <li><a href="Servers.aspx" runat="server" id="menu_item_servers">Servers</a></li> 
       <li><a href="Statistics.aspx" runat="server" id="menu_item_statistics">Statistics</a></li> 
       <li><a href="Tutorials.aspx" runat="server" id="menu_item_tutorials">Tutorials</a></li> 
       <li><a href="Contact.aspx" runat="server" id="menu_item_contact">Contact us</a></li> 
       <div id="login_registration_container"> 
        <a href="#" id="login">Sign in</a>/<a href="Registration.aspx" id="register">Register</a> 
       </div> 
      </ul> 
     </div> 

我想這種方式更改CSS類menu_item_default錨標籤:

WebControl wc = (WebControl)FindControl("#menu_item_default"); 
wc.Attributes.Add("class", "value"); 

error: null reference exception

如何才能做到這一點?

回答

3

使用母版和元素處於的ContentPlaceHolder:

如果是這樣,那麼你必須先檢索的ContentPlaceHolder ,並從中回收你想要的元素。

如果你的頁面有例如以下內容領域:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 

然後,你會做以下(錯誤處理略):

var mainCtrl = Master.FindControl("MainContent"); 
    var anchor = (HtmlAnchor) mainCtrl.FindControl("menu_item_default"); 
    anchor.Attributes.Add("class", "value"); 

使用母版和元素在MasterPage中:

使用:

var anchor = (HtmlAnchor) Master.FindControl("menu_item_default"); 
4

你不應該使用在的FindControl參數「#」符號:

WebControl wc = (WebControl)FindControl("menu_item_default"); 
+0

不起作用 – 2012-02-04 00:22:26

+1

@Acid這個控件是否在表單中?然後,也許它找到它,但它不是WebControl,看看是否找到它作爲對象,然後它是什麼 – Aristos 2012-02-04 00:26:55

+0

沒有這個錨標籤是在主頁面內...我的web表單無法訪問它們? – 2012-02-04 00:29:39

0

是否有您使用的是常規的錨標記一個特別的原因?爲什麼不使用ASP.Net LinkBut​​ton?這將使代碼中的引用變得更容易。

如果控制母版頁上,嘗試 Master.FindControl()

+2

他可以在服務器端使用runat = server來引用任何控件。 – 2012-02-04 00:28:04

+0

我知道,但在處理實際的.Net控件時有更多的選項。 – Chris 2012-02-04 00:31:47

相關問題