FindControl导致null引用

时间:2012-02-04 00:19:46

标签: asp.net

我有像这样的锚标签

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

我想以这种方式更改menu_item_default的CSS类:

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

错误:null引用异常

如何做到这一点?

3 个答案:

答案 0 :(得分:4)

你不应该在FindControl参数中使用'#'符号:

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

答案 1 :(得分:3)

使用MasterPage,该元素位于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,该元素位于MasterPage中:

使用:

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

答案 2 :(得分:0)

您使用常规锚标签是否有特殊原因?为什么不使用ASP.Net LinkBut​​ton?这将使代码中的引用更容易。

如果控件位于母版页上,请尝试     Master.FindControl()