CodeSnip: Find Control in Nested Master Pages
 
Published: 08 Oct 2008
Abstract
In this article, Abdulla examines how to find a control from Content Page inside two Nested Master Pages using Visual Studio 2008. He initially demonstrates the problem and then provides the required solution with relevant code samples.
by Abdulla Hussein AbdelHaq
Feedback
Average Rating: 
Views (Total / Last 10 Days): 28549/ 46

Introduction

Finding a server control inside a Content page inheriting from nested master pages is one of the problems that so many developers have faced. So in this code snippet, I will show you how to solve this issue.

Problem

Listing 1: Main Master Page

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Outer Master Page</title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h3>Outer Master Page</h3>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

Listing 2: Second Master Page

<%@ Master Language="VB" CodeFile="MasterPage2.master.vb" 
MasterPageFile="~/MasterPage.master"
Inherits="MasterPage2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" 
Runat="Server">
<h3>Inner Master Page</h3>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat=server>
</asp:ContentPlaceHolder>
</asp:Content>

Listing 3: Content Page

<%@ Page Language="VB" MasterPageFile="~/MasterPage2.master" 
AutoEventWireup="false"
CodeFile="Default.aspx.vb" Inherits="_Default" %>
<asp:Content ID="Content1" runat="server" 
contentplaceholderid="ContentPlaceHolder2">
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button" />
</asp:Content>

As shown in the previous code, we have a label control inside the content page and that content page is related to the Second Master Page, which is related to the Main Master Page. This will integrate the label control in the nested master page, so that makes finding the label more difficult.

Now we would like to change the text of the label from code behind when we press on the button.

Solution

First of all, we should search about the content place holder of the outer master page, and then search about the content place holder of the inner master page. Finally, we will search deeply inside the two content place holders about our label control.

Listing 4 is the code that you need to write.

Listing 4: Find control inside nested master pages

' Outer Master Page
Dim Outer_CP As ContentPlaceHolder
Outer_CP = TryCast(Me.Master.Master.FindControl("ContentPlaceHolder1"), _
ContentPlaceHolder)
 
' Inner Master Page
Dim Inner_CP As ContentPlaceHolder
Inner_CP = TryCast(Outer_CP.FindControl("ContentPlaceHolder2"), _
ContentPlaceHolder)
Dim lbl As Label = TryCast(Inner_CP.FindControl("Label1"), Label)
 
lbl.Text = "Text was changed inside nested master page!"
Conclusion

In this code snippet I have illustrated how to find a control inside nested master pages in .NET 2008. I hope that this article will help you to work with nested master pages easily.



User Comments

Title: Excellent Example   
Name: Debbie
Date: 2012-04-24 12:49:56 PM
Comment:
This code was exactly what I was looking for. I have been working on this problem for 2 hrs. Thanks so much!!
Title: Nice!   
Name: mon
Date: 2011-07-07 11:57:13 PM
Comment:
great!
helped me a lot. been figuring this out for 2 hours.
thanks!
Title: Developer   
Name: Azhar rizvi
Date: 2010-07-09 2:54:52 AM
Comment:
Thanks a lot man..
You have done a great job.
keep posting.

Wish u smiles.
Title: developer   
Name: Cas
Date: 2010-04-26 10:50:48 AM
Comment:
Thanks a bunch. I have been really struggling calling controls in nested master pages, this really simplified it.

Good Stuff :)
Title: developer   
Name: netslaves
Date: 2010-03-09 8:27:32 AM
Comment:
thanks
Title: Great logic!   
Name: d-cpt
Date: 2009-08-17 10:45:31 AM
Comment:
Excellent article.
Thanks a lot.
Title: Less Code   
Name: Lannie Lawton
Date: 2009-07-18 3:26:25 PM
Comment:
Dim lbl As label = Me.Master.Master.FindControl("ContentPlaceHolder1$ContentPlaceHolder1$Label1")

Would work too, at least in VS 2008.
Title: good explaination   
Name: soma sekhar
Date: 2009-06-23 2:52:21 AM
Comment:
this is good example to get master page controls
Title: Great   
Name: Abidali
Date: 2009-03-24 8:21:40 AM
Comment:
nice article
Help me lot

Product Spotlight
Product Spotlight 





Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2024 ASPAlliance.com  |  Page Processed at 2024-04-23 10:20:03 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search