?
Solved

FindControl() With MasterPages

Posted on 2008-10-30
7
Medium Priority
?
667 Views
Last Modified: 2013-11-08
Hello, Im tring to find a control inside a master page contentplaceholder with the following:

                Dim TargetImage As HyperLink
                TargetImage = FindControl("Content2").FindControl("Image" & i)

I get object reference not set to an instance of an object.  I also tried:
                TargetImage = Me.Master.FindControl("Content2").FindControl("Image" & i)

The controls are not in the master page but in a page that uses the master page.  It did work before adding utalizing master pages also.  How can i fix this?

Thanks,

Greg
0
Comment
Question by:grogo21
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
7 Comments
 
LVL 8

Expert Comment

by:dampsey
ID: 22842123
Assuming Content2 is the name of the master page contentplaceholder name,

Can you please try the following:
TargetImage = Me.Master.FindControl("Image" & i)

0
 

Author Comment

by:grogo21
ID: 22842299
That did not work. I have attached the source code for my page.

Thanks!
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <div class="HeaderContentDiv">
            <asp:Label ID="WelcomeLabel" CssClass="WelcomeLabel" runat="server" Text=""></asp:Label><br /></div>
            
        <div class="GalleryContentDiv">
            <table>
                <tr valign="middle">
                    <td><asp:HyperLink ID="Image1" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image2" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image3" runat="server" visible="false" CssClass="ImageTR"/></td>
                </tr>
                <tr class="ImageTR" valign="middle">
                    <td><asp:HyperLink ID="Image4" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image5" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image6" runat="server" visible="false" CssClass="ImageTR"/></td>
                </tr>
                <tr valign="middle" align="center">
                    <td colspan="3" align="center" style="padding:5px; text-align:center;"><asp:HyperLink ID="Banner1" runat="server" visible="false" Target="_blank" CssClass="BannerImg"/></td>
                </tr>
                <tr class="ImageTR" valign="middle">
                    <td><asp:HyperLink ID="Image7" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image8" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image9" runat="server" visible="false" CssClass="ImageTR"/></td>
                </tr>
                <tr class="ImageTR" valign="middle">
                    <td><asp:HyperLink ID="Image10" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image11" runat="server" visible="false" CssClass="ImageTR"/></td>
                    <td><asp:HyperLink ID="Image12" runat="server" visible="false" CssClass="ImageTR"/></td>
                </tr>
....
            </table>
        </div>
</asp:Content>

Open in new window

0
 
LVL 8

Accepted Solution

by:
dampsey earned 2000 total points
ID: 22842363
place the below code anywhere in your code.

then use the following

FindControlRecursive(this.Page, "Image" + i)

I know the following is written in c# but you may change it to vb easily
        public static Control FindControlRecursive(Control Root, string Id)
        {
            if (Root.ID == Id)
                return Root;
 
            foreach (Control Ctl in Root.Controls)
            {
                Control FoundCtl = FindControlRecursive(Ctl, Id);
                if (FoundCtl != null)
                    return FoundCtl;
            }
 
            return null;
        }

Open in new window

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:grogo21
ID: 22842523
Still get Object reference not set to an instance of an object.

Thanks
0
 
LVL 8

Expert Comment

by:dampsey
ID: 22847962
In which event of the page you are using the FindControl function?
0
 

Author Comment

by:grogo21
ID: 22860202
PageLoad event
0
 

Author Comment

by:grogo21
ID: 22860332
This appears to work:
                TargetImage = DirectCast(DirectCast(Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder).FindControl("Image" & i.ToString), HyperLink)


Thanks!
0

Featured Post

Cloud Training Guides

FREE GUIDES: In-depth and hand-crafted Linux, AWS, OpenStack, DevOps, Azure, and Cloud training guides created by Linux Academy instructors and the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
Suggested Courses

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question