Applying MasterPageFile from codebehind question

  • Thread starter Thread starter WT
  • Start date Start date
W

WT

Hello,

I am searching for a way to detect on OmPreInit if the page could support a
MaterPage.
My site is loading dynamically aspx pages and some of them are prepared for
MasterPages, some other not.
Is there a call which could detect if the content framework is present or
not ?

Thanks.

CS
 
I'm fairly certain the ContentPlaceHolder templates show up in trace and can
be found by reference using FindControl but I would rather use the old
reliable standby HTML type="hidden" control which is also available in the
ASP.NET Web Controls Toolbox (?). That will serve as a good marker; put one
into each master with a known ID, use FindControl and there you go.
 
Hi CS,

As for detecting the concrete page's type, as Hillbilly suggested, one
means is to check the Controls collection of current page. Based on my
test, for content page(which adopting master page), the top level control
is the Master page User control. While for normal page, the top level
controls are the normal Literal controls and Form controls.

Also, I also find another means which may helps. Since content page will
use "MasterPageFile" to define an initial/default master page while normal
page hasn't, you can use Page.Master or Page.MasterPageFile property to
determine whether it is a normal asp.net page or content page(that require
Master page). Here is a simple test function to demonstrate this:

========================
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("<br/>Master:" + this.Master);
Response.Write("<br/>MasterPageFile:" + this.MasterPageFile);


Response.Write("<br/>top level controls:");
foreach (Control ctrl in this.Controls)
{
Response.Write("<br/>" + ctrl.ID + ": " + ctrl.GetType());
}
}

========================

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subscriptions/aa948868.aspx#notifications.

Note: MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 2 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions. Issues of this
nature are best handled working with a dedicated Microsoft Support Engineer
by contacting Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/en-us/subscriptions/aa948874.aspx
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.


--------------------
 
trivial:

if (Page.Master == null)
Response.Write("no master");

-- bruce (sqlwork.com)
 
Hi Bruce, Steven and Hillbilly,

Thanks for answers.

Not so trivial. If Master is null, this doesn't mean that the page has the
<asp:content ContentPlaceHolderID=.... infrastructure to support a
masterpage...and a master page could have its masterFile declaration not
set.
....
One solution could be tracking the header control but some page could have
no header ?
Maybe I should open the aspx file with a normal IO and scan it to discover a
correct ContentPlaceHolderID ?
but it will be so slow....
 
Thanks for your reply CS,

Yes, I've also inspected the generated page class(dynamic compiled) in
reflector, but didn't find any obvious property that can help detect
whether current page is content page or not.

So far I think the reasonable means is always assign a default Master page
for every content page. thus, you can use Page.Master or other related
property ensure whether it is a content page. What do you think of this?

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).


--------------------
 
Back
Top