Handling Master Page Click Events in the Content Page

I had to try something new the other day to solve a problem, setting the Click Event Handler of a button on a Master Page in the Content Page. Honestly I have never had the need, or at least not realized that I needed this functionality up to this point so I was a little hesitant. Needless to say I figured it out and pretty quickly, at least a workable solution.
So the problem I had to solve was how to handle a LinkButon Click event from within the content page for a LinkButton on the Master Page. The LinkButtons need to be displayed on every page the same way, but each page needed to process some unique business logic on each content page, so I really needed to handle the click event in the content page.
I often create public properties to provide access to variables on Master Pages. I also do this with Cross-Page Postbacks to provide access to variables and controls. So I thought this would work.

This is the code that defines the property in the Master Page for the LinkButton lnkbFromMasterPage.

VB

   

Public

ReadOnly

Property

lnkbFromMasterPage()

As

LinkButton

       

Get

           

Return

lnbFromMasterPage

       

End

Get

   

End

Property

C#

   

Public

LinkButton

lnkbFromMasterPage(){

       

Get {

           

Return

lnbFromMasterPage;

       

}

   

}

The next step is to reference the Master Page as a casted object in the Content page. This can be done easy enough by accessing the MasterPage object of the content page and casting it to the class for our Master Page. Here the class defined for the Master Page is CustomMasterPage.

VB 

   

Dim

cmp

As

 CustomMasterPage =

CType

(Master, CustomMasterPage)

C# 

    CustomMasterPage cmp =

(

(CustomMasterPage)(Master));

Now we can access any Public properties, methods and members of our CustomMasterPage class. So here was the magic, would I be able to handle the button events in the Content Page? Of course I can!
You simply need to define the event handler in your Content Page, I do it in the PageLoad event handler.

VB

   

If

Not

IsNothing(cmp)

Then

 

       

AddHandler

cmp.lnkbFromMasterPage.Click,

AddressOf

lnkbFromMasterPage_Click

 

   

End

If

 

C# 

   

If

(!(IsNothing(cmp))) {

 

        cmp.lnkbFromMasterPage.Click += New EventHandler(lnkbFromMasterPage_Click);

 

   

End

If

Later in my code I define the actual method to handle the event.

VB

   

Protected

Sub

lnkbFromMasterPage_Click(

ByVal

sender

As

Object

,

ByVal

e

As

System.EventArgs)

       

'Perform Business Logic Here

   

End

Sub

 

C#  

   

Protected

 

void

lnkbFromMasterPage_Click(

Object sender

, System.EventArgs e){

       

'Perform Business Logic Here

   

}

That is all there is to it. The same architecture works for User Controls as well, since that is really what a Master Page actually is. I was satisfactorily surprised at how easy this was, not to mention my first thought on how to solve this problem.

kick it on DotNetKicks.com

Share This Article With Your Friends!