![]() |
Web Development »
ASP.NET »
Howto
Intermediate
License: The Code Project Open License (CPOL)
Master Page and Content Page InteractionBy John GleesonHow to access Master page controls and routines from a content page and vice versa. |
VB.NET 2.0, .NET 3.0, .NET 3.5, ASP.NET, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
In a MasterPage - ContentPage structure, it is often useful to be able to access controls in the Master page from code in the Content page and vice versa. Similarly, it can also be useful to access routines in one page from the other. We use Master pages a lot, and I regularly needed to do this type of interaction, and could never find the correct code snippet, so I finally decided to write them down properly.
These interactions can be useful in a number of ways.
For example, on a Master page, you might have a Save button which saves the contents of the current Content page. However, prior to saving, you might need to validate that the data had been entered correctly. If you do this validation on the Master page and the structure of your Content pages differ, then you will end up with a large Select structure where you list all the possible Content page types and validate their data.
It is more modular to have the validation code in the Content page and call it from the Master page.
Suppose there is a Label on the Master page that we want to write to from the Content page.
MasterType directive at the top of the Content page ASPX file:<%@ MasterType virtualpath="~/DetailsMaster.master" %>
Label:Public Function LabelReference() As Label
' Create a reference to an actual label on the page
LabelReference = lblDetailsItemName
End Function
Label from the Content page using the Master syntax:Master.LabelReference.Text = "Some Text"
If the MasterType directive is in place in the Content page, then public functions in the Master page are available to the Content page code.
' Call the SavePageData function from the Master page
Master.SavePageData()
Suppose we have a Master page that contains a ContentPlaceHolder called DetailsMaster_ContentPlaceHolder. If the content page contains a TextBox called txtPass, we can declare a ContentPlaceHolder object and use it to find a reference to the TextBox.
Dim mpContentPlaceHolder As ContentPlaceHolder
' Get a reference to the contentPlaceHolder
mpContentPlaceHolder = _
CType(FindControl("DetailsMaster_ContentPlaceHolder"), _
ContentPlaceHolder)
' Use FindControl to get a reference to a TextBox
' in the ContentPage called txtPass and write to its Text property
CType(mpContentPlaceHolder.FindControl("txtPass"), _
TextBox).Text = "Text for the TextBox"
We can use VB’s CallByName function to call a function in the Content page. This will allow us to have, e.g., the validation function for a form stored within the form and thus have different validations for each form. Suppose we have functions in a Content page like:
' function that receives a string and returns a string
Public Function ValidateMe(ByVal strInput As String) As String
ValidateMe = "The input was: " + strInput
End Function
' function that receives an Integer and returns an Integer
Public Function SumMe(ByVal Input1 As Integer, _
ByVal Input2 As Integer) As Integer
SumMe = Input1 + Input2
End Function
Then, we can call them from the Master page by setting up wrapper functions that connect to the Content page object, and do the CallByName.
Private Function CallContentPageStringFunction(ByVal FunctionName _
As String, ByVal aParamArray() As String) As String
Dim mpContentPlaceHolder As ContentPlaceHolder
mpContentPlaceHolder = _
CType(FindControl("DetailsMaster_ContentPlaceHolder"), _
ContentPlaceHolder)
CallContentPageStringFunction = CallByName(mpContentPlaceHolder.Page, _
FunctionName, vbMethod, aParamArray)
End Function
Private Function CallContentPageIntegerFunction(ByVal FunctionName _
As String, ByVal aParamArray() As String) As Integer
Dim mpContentPlaceHolder As ContentPlaceHolder
mpContentPlaceHolder = _
CType(FindControl("DetailsMaster_ContentPlaceHolder"), _
ContentPlaceHolder)
CallContentPageIntegerFunction = CallByName(mpContentPlaceHolder.Page, _
FunctionName, vbMethod, aParamArray)
End Function
Then, we can pass parameters and get the return value as shown here:
Dim aParams(0) As String
aParams(0) = "Stand Up and Fight"
Dim strReturnValue As String = _
CallContentPageStringFunction("ValidateMe", aParams)
The return value in this case will be "The input was: Stand Up and Fight".
ReDim aParams(1)
aParams(0) = 10
aParams(1) = 12
Dim intRet As Integer = _
CInt(CallContentPageIntegerFunction("SumMe", aParams))
The return value in this case will be 220.
| You must Sign In to use this message board. | ||||||||||||||||||||||
|
||||||||||||||||||||||
|
||||||||||||||||||||||
|
||||||||||||||||||||||
|
||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 1 May 2009 Editor: Smitha Vijayan |
Copyright 2009 by John Gleeson Everything else Copyright © CodeProject, 1999-2009 Web10 | Advertise on the Code Project |