By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,882 Members | 928 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,882 IT Pros & Developers. It's quick & easy.

How can I access a Master Page Public Property from a Base Page

P: n/a
I am trying to access a Public property on a Master Page from a Base Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property
From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page with:
Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the strongly
typed Master Page and access the ErrorMessage property?

Nov 9 '07 #1
Share this Question
Share on Google+
6 Replies


P: n/a
On Nov 9, 12:03 pm, Jay Pondy <jpo...@AugustaNewsprint.comwrote:
I am trying to access a Public property on a Master Page from a Base Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property

From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page with:
Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the strongly
typed Master Page and access the ErrorMessage property?
Dim myMaster As New {masterClassName}
myMaster.ErrorMessage = "Some Error Message."

Nov 9 '07 #2

P: n/a
Almost there but...

I created a BaseMaster class that inherits from System.Web.UI.MasterPage And
placed my Public Property there:
Public Class BaseMaster : Inherits System.Web.UI.MasterPage

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
'Make the error table row invisible
CType(Page.Master.FindControl("rowError"), HtmlTableRow).Visible = False
End Sub
Public Property ErrorMessage() As String
Get
Return CType(Page.Master.FindControl("txtError"),
HtmlGenericControl).InnerText
End Get
Set(ByVal value As String)
Trace.Write("BaseMaster.ErrorMessage.Set")
CType(Page.Master.FindControl("txtError"),
HtmlGenericControl).InnerText = value
CType(Page.Master.FindControl("rowError"), HtmlTableRow).Visible =
True
End Set
End Property
End Class
In my Master Page I now inherit from BaseMaster and I CAN now access the
Property from my content pages:
CType(Page.Master, BaseMaster).ErrorMessage = "Some Error Message."

BUT...

All of my Pages inherit from a BasePage class that contains a Page_Error handler
from where I would like to access the MasterPage property when an error occurs:

Public Class BasePage : Inherits System.Web.UI.Page

Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Error
CType(Page.Master, BaseMaster).ErrorMessage =
Server.GetLastError.Message
End Sub

End Class
The problem now is that when I generate an error on the content page the Page
Error handler in my BasePage class fires and it sets the public property in my
BaseMaster but nothing is displayed on the page (the URL is correct for the
content page) the only HTML rendered is:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>

There is no Master and no Content HTML. I'm missing a call to something
somewhere.

On Fri, 9 Nov 2007 03:03:01 -0800, Jay Pondy <jp****@AugustaNewsprint.com>
wrote:
>I am trying to access a Public property on a Master Page from a Base Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property
From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page with:
Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the strongly
typed Master Page and access the ErrorMessage property?
Nov 9 '07 #3

P: n/a
Unclear. The last part would make me think you try to access in a base class
to a property you defined in a derived class. This is the other way round
(i.e. what a base class is allowed to do is automatically doable by its
derived classes).

--
Patrice

"Alexey Smirnov" <al************@gmail.coma écrit dans le message de news:
11**********************@z24g2000prh.googlegroups. com...
On Nov 9, 12:03 pm, Jay Pondy <jpo...@AugustaNewsprint.comwrote:
>I am trying to access a Public property on a Master Page from a Base
Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property

From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page
with:
Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the
strongly
typed Master Page and access the ErrorMessage property?

Dim myMaster As New {masterClassName}
myMaster.ErrorMessage = "Some Error Message."

Nov 9 '07 #4

P: n/a
even better than a cast, tell asp.net to do it.

<%@ MasterType TypeName="MyMaster" %>

-- bruce (sqlwork.com)
Jay Pondy wrote:
I am trying to access a Public property on a Master Page from a Base Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property
From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page with:
Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the strongly
typed Master Page and access the ErrorMessage property?
Nov 9 '07 #5

P: n/a
Hi Jay,

As for accessing propertes in Master page, you can also consider the
following means:

#define a public interface which contains the properties or method you need
#let master implement the interface and in content page, simply cast Master
page to that interface and call those interface methods. e.g.

=========Interface===================
public interface IError
{
string ErrorInfo {get;set; }
}

=========Master page==============
public partial class Masters_err : System.Web.UI.MasterPage, IError
{
......................
======================

thus, you do not need to define base classes. For the problem that the
page doesn't display any UI after "Page_Error" event, I think this is
because when there occurs unhandled exception, the original page processing
sequence is broken, therefore, you can not expect it to render the page
content as normal (if there occurs unhandled exception). The "Page_Error"
or "Application_Error" event just provide you a point to capture this error
status and the recommended approach to show error info is defining a custom
error page or manually do redirection in "Page_Error" event (to your own
error page). You can store the last error info in SessionState if necessary.
Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead
This posting is provided "AS IS" with no warranties, and confers no rights.



--------------------
>From: Jay Pondy <jp****@bellsouth.net>
Newsgroups: microsoft.public.dotnet.framework.aspnet
Subject: Re: How can I access a Master Page Public Property from a Base
Page
>Date: Fri, 09 Nov 2007 07:18:50 -0500
>
Almost there but...

I created a BaseMaster class that inherits from System.Web.UI.MasterPage
And
>placed my Public Property there:
Public Class BaseMaster : Inherits System.Web.UI.MasterPage

Private Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)
>Handles Me.Load
'Make the error table row invisible
CType(Page.Master.FindControl("rowError"), HtmlTableRow).Visible =
False
End Sub
Public Property ErrorMessage() As String
Get
Return CType(Page.Master.FindControl("txtError"),
HtmlGenericControl).InnerText
End Get
Set(ByVal value As String)
Trace.Write("BaseMaster.ErrorMessage.Set")
CType(Page.Master.FindControl("txtError"),
HtmlGenericControl).InnerText = value
CType(Page.Master.FindControl("rowError"),
HtmlTableRow).Visible =
>True
End Set
End Property
End Class
In my Master Page I now inherit from BaseMaster and I CAN now access the
Property from my content pages:
CType(Page.Master, BaseMaster).ErrorMessage = "Some Error Message."

BUT...

All of my Pages inherit from a BasePage class that contains a Page_Error
handler
>from where I would like to access the MasterPage property when an error
occurs:
>
Public Class BasePage : Inherits System.Web.UI.Page

Private Sub Page_Error(ByVal sender As Object, ByVal e As
System.EventArgs)
>Handles MyBase.Error
CType(Page.Master, BaseMaster).ErrorMessage =
Server.GetLastError.Message
End Sub

End Class
The problem now is that when I generate an error on the content page the
Page
>Error handler in my BasePage class fires and it sets the public property
in my
>BaseMaster but nothing is displayed on the page (the URL is correct for the
content page) the only HTML rendered is:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html;
charset=windows-1252"></HEAD>
><BODY></BODY></HTML>

There is no Master and no Content HTML. I'm missing a call to something
somewhere.

On Fri, 9 Nov 2007 03:03:01 -0800, Jay Pondy <jp****@AugustaNewsprint.com>
wrote:
>>I am trying to access a Public property on a Master Page from a Base Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property
From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page
with:
> Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the
strongly
>>typed Master Page and access the ErrorMessage property?
Nov 12 '07 #6

P: n/a
Thanks Steven.
"Steven Cheng[MSFT]" wrote:
Hi Jay,

As for accessing propertes in Master page, you can also consider the
following means:

#define a public interface which contains the properties or method you need
#let master implement the interface and in content page, simply cast Master
page to that interface and call those interface methods. e.g.

=========Interface===================
public interface IError
{
string ErrorInfo {get;set; }
}

=========Master page==============
public partial class Masters_err : System.Web.UI.MasterPage, IError
{
......................
======================

thus, you do not need to define base classes. For the problem that the
page doesn't display any UI after "Page_Error" event, I think this is
because when there occurs unhandled exception, the original page processing
sequence is broken, therefore, you can not expect it to render the page
content as normal (if there occurs unhandled exception). The "Page_Error"
or "Application_Error" event just provide you a point to capture this error
status and the recommended approach to show error info is defining a custom
error page or manually do redirection in "Page_Error" event (to your own
error page). You can store the last error info in SessionState if necessary.
Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead
This posting is provided "AS IS" with no warranties, and confers no rights.



--------------------
From: Jay Pondy <jp****@bellsouth.net>
Newsgroups: microsoft.public.dotnet.framework.aspnet
Subject: Re: How can I access a Master Page Public Property from a Base
Page
Date: Fri, 09 Nov 2007 07:18:50 -0500

Almost there but...

I created a BaseMaster class that inherits from System.Web.UI.MasterPage
And
placed my Public Property there:
Public Class BaseMaster : Inherits System.Web.UI.MasterPage

Private Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)
Handles Me.Load
'Make the error table row invisible
CType(Page.Master.FindControl("rowError"), HtmlTableRow).Visible =
False
End Sub
Public Property ErrorMessage() As String
Get
Return CType(Page.Master.FindControl("txtError"),
HtmlGenericControl).InnerText
End Get
Set(ByVal value As String)
Trace.Write("BaseMaster.ErrorMessage.Set")
CType(Page.Master.FindControl("txtError"),
HtmlGenericControl).InnerText = value
CType(Page.Master.FindControl("rowError"),
HtmlTableRow).Visible =
True
End Set
End Property
End Class
In my Master Page I now inherit from BaseMaster and I CAN now access the
Property from my content pages:
CType(Page.Master, BaseMaster).ErrorMessage = "Some Error Message."

BUT...

All of my Pages inherit from a BasePage class that contains a Page_Error
handler
from where I would like to access the MasterPage property when an error
occurs:

Public Class BasePage : Inherits System.Web.UI.Page

Private Sub Page_Error(ByVal sender As Object, ByVal e As
System.EventArgs)
Handles MyBase.Error
CType(Page.Master, BaseMaster).ErrorMessage =
Server.GetLastError.Message
End Sub

End Class
The problem now is that when I generate an error on the content page the
Page
Error handler in my BasePage class fires and it sets the public property
in my
BaseMaster but nothing is displayed on the page (the URL is correct for the
content page) the only HTML rendered is:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html;
charset=windows-1252"></HEAD>
<BODY></BODY></HTML>

There is no Master and no Content HTML. I'm missing a call to something
somewhere.

On Fri, 9 Nov 2007 03:03:01 -0800, Jay Pondy <jp****@AugustaNewsprint.com>
wrote:
>I am trying to access a Public property on a Master Page from a Base Page.

On the content pages I have the MasterType Directive set up as follows:
<%@ MasterType virtualpath="~/Master.master" %>

On the Master Page I have a public property exposed:
Public Property ErrorMessage() As String
Get
Return txtError.InnerText
End Get
Set(ByVal value As String)
txtError.InnerText = value
rowError.Visible = True
End Set
End Property
From the Content Page I can access the property:
Me.Master.ErrorMessage = "Some Error Message."

If I try and access the Master Page Property from an inherited Base Page
with:
Me.Master.ErrorMessage = "Some Error Message."
the IDE highlights the error with:
ErrorMessage is not a member of System.Web.UI.MasterPage

Is there some way I can cast the Base Page Master property to the
strongly
>typed Master Page and access the ErrorMessage property?

Nov 14 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.