Solved

FindControl() With MasterPages

Posted on 2008-10-30
7
647 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
  • 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 500 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
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 

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

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

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

Suggested Solutions

ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

828 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