How To Access Content From MasterPage in ASP.NET

So, you want to access some content from inside a page that you created from an existing master page?  The most clean way to do this is to create a public property in your master page, then access that.  In my case, I have a search button on a master page that I want to use from inside to pages that derive from that page.  So, Here is how I declare my master page:

   1: <%@ Master Language="C#" MasterPageFile="~/MasterPages/MasterPage.Master" AutoEventWireup="true"
   2:     CodeBehind="ContactMasterPage.master.cs" Inherits="ThreePLogic.Web.ASPWeb.ContactPages.ContactMasterPage" %>
   3:  
   4: <asp:Content ID="Content5" ContentPlaceHolderID="ContentCenter" runat="server">
   5:         <asp:TextBox ID="TextBoxSearchName" runat="server" Width="200px" CssClass="InputText"></asp:TextBox>
   6:         <asp:Button ID="ButtonSearchName" runat="server" CssClass="SearchBtn" />
   7:         </div>
   8: </div>

In my codebind for my masterpage, I have the following:

   1: using System;
   2: using System.Web.UI;
   3: using System.Web.UI.WebControls;
   4: using ThreePLogic.Data.ThreePLogicAccess;
   5:  
   6: namespace ThreePLogic.Web.ASPWeb.ContactPages
   7: {
   8:     public partial class ContactMasterPage : MasterPage
   9:     {
  10:         public string SearchText
  11:         {
  12:             get
  13:             {
  14:                 TextBox textBoxSearch = Master.FindControl("ContentCenter").FindControl("TextBoxSearchName") as TextBox;
  15:                 if (textBoxSearch != null)
  16:                 {
  17:                     return textBoxSearch.Text;
  18:                 }
  19:                 else
  20:                 {
  21:                     return String.Empty;
  22:                 }
  23:                 
  24:             }
  25:         }

 

Then, in my page I derive from the masterpage I have the following.  Notice that I include the masterpage type so I can have type safe access to the public property.

 

   1: <%@ Master Language="C#" MasterPageFile="~/ContactPages/ContactMasterPage.Master"
   2:     AutoEventWireup="true" CodeBehind="ContactCompanyMasterPage.master.cs" Inherits="ThreePLogic.Web.ASPWeb.ContactPages.ContactCompany.ContactCompanyMasterPage" %>
   3:  
   4: <%@ MasterType TypeName="ThreePLogic.Web.ASPWeb.ContactPages.ContactMasterPage" %>
   5:  
   6: <asp:Content ID="Content1" ContentPlaceHolderID="GridContent" runat="server">
   7:  
   8:     <asp:Label ID="LabelSearchMirror" runat="server" Text=""   Visible="false" ></asp:Label>

 

Then, finally, in the codebehind, this is how I access my search box.  In my case, I assign it to an invisible label, then I can have server side presentation controls, like GridView, access it as a select parameter.

   1: using System;
   2: using System.Web.UI;
   3: using System.Web.UI.WebControls;
   4: using ThreePLogic.Common.Enums;
   5: using ThreePLogic.Web.ASPWeb.Code;
   6:  
   7: namespace ThreePLogic.Web.ASPWeb.ContactPages.ContactCompany
   8: {
   9:     public partial class ContactCompanyMasterPage : MasterPage
  10:     {
  11:         protected void Page_PreRender(object sender, EventArgs e)
  12:         {
  13:             GridViewCompany.PageIndex = UserService.I.GetCookieSelectedId(CookieIdType.CompanyCurrentPage);
  14:             if (!String.IsNullOrEmpty(Master.SearchText))
  15:             {
  16:                 LabelSearchMirror.Text = Master.SearchText;
  17:                 GridViewCompany.DataBind();
  18:             }
  19:         }

Good luck, and hope this helps!

About Peter Kellner

Peter is a software professional specializing in mobile and web technologies. He has also been a Microsoft MVP for the past 7 years. To read more about Peter Kellner and his experience click here. For information about how Peter Kellner might be able to help you with your project click here.

Follow me:


Comments

  1. BadGirl35 says:

    Does your relationship with your work change after it is published and if so, how? ,

  2. Oh my gosh, better be careful giving out advice like this. (Heavy sarcasm noted.)

    Check out a post I made on the ASP.NET forums back in 2006, and the wrath it incurred from some know-it-all, monolythic coders:

    http://forums.asp.net/t/1007602.aspx

    Thanks for posting this. It a technique I’ve been using successfully for years on a very big site. It simplifies a great many things.

    -Todd

Your Comments

*

Protected with IP Blacklist CloudIP Blacklist Cloud

Follow

Get every new post delivered to your Inbox

Join other followers: