Search code examples
c#asp.netmaster-pagesfindcontrol

FindControl for finding control on page that uses master page


I have this aspx that uses a master page:

<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="server">
   <div class="mlists">
       <a href="?"><img id="i1" src="../img/1.png" runat="server" alt="1"/></a>
       <a href="?"><img id="i2" src="../img/2.png" runat="server" alt="2"/></a> 
       <a href="?"><img id="i3" src="../img/3.png" runat="server" alt="3"/></a> 

   </div>
</asp:Content>

but I can't access to image controls using this code:

var control = FindControl("Content1").FindControl("i2");
((HtmlImage)control).Src = "../img/x.png";

and

Object reference not set to an instance of an object.

error occurs, since FindControl("Content1") returns null. note that also this code returns null:

var control = FindControl("i2");

Solution

  • You can't access content, please refer to this question.

    Perhaps, you wanted to add "runat=server" to div and access ImageControls.

    <asp:Content ID="Content1" runat="server" ContentPlaceHolderID="content">
        <div class="mlists" runat="server" id="div">
           <a href="?"><img id="i1" src="../img/1.png" runat="server" alt="1"/></a>
           <a href="?"><img id="i2" src="../img/2.png" runat="server" alt="2"/></a> 
           <a href="?"><img id="i3" src="../img/3.png" runat="server" alt="3"/></a> 
    
       </div>
    </asp:Content>
    

    Then access controls in code behind like this:

    var control = div.FindControl("i2");
    ((HtmlImage)control).Src = "../img/x.png";