Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / WebControls / ContentPlaceHolder.cs / 1 / ContentPlaceHolder.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System; using System.Collections; using System.ComponentModel; using System.Security.Permissions; using System.Web.UI; using System.Web.Util; internal class ContentPlaceHolderBuilder : ControlBuilder { private string _contentPlaceHolderID; private string _templateName; internal string Name { get { return _templateName; } } public override void Init(TemplateParser parser, ControlBuilder parentBuilder, Type type, string tagName, string ID, IDictionary attribs) { // Copy the ID so that it will be available when BuildObject is called _contentPlaceHolderID = ID; if (parser.FInDesigner) { // shortcut for designer base.Init(parser, parentBuilder, type, tagName, ID, attribs); return; } if (String.IsNullOrEmpty(ID)) { throw new HttpException(SR.GetString(SR.Control_Missing_Attribute, "ID", type.Name)); } _templateName = ID; MasterPageParser masterPageParser = parser as MasterPageParser; if (masterPageParser == null) { throw new HttpException(SR.GetString(SR.ContentPlaceHolder_only_in_master)); } base.Init(parser, parentBuilder, type, tagName, ID, attribs); if (masterPageParser.PlaceHolderList.Contains(Name)) throw new HttpException(SR.GetString(SR.ContentPlaceHolder_duplicate_contentPlaceHolderID, Name)); masterPageParser.PlaceHolderList.Add(Name); } public override object BuildObject() { MasterPage masterPage = TemplateControl as MasterPage; Debug.Assert(masterPage != null || InDesigner); // Instantiate the ContentPlaceHolder ContentPlaceHolder cph = (ContentPlaceHolder) base.BuildObject(); // If the page is providing content, instantiate it in the holder if (PageProvidesMatchingContent(masterPage)) { ITemplate tpl = ((System.Web.UI.ITemplate)(masterPage.ContentTemplates[_contentPlaceHolderID])); HttpContext context = HttpContext.Current; // Remember the old TemplateControl TemplateControl oldControl = context.TemplateControl; // Storing the template control into the context // since each thread needs to set it differently. context.TemplateControl = masterPage._ownerControl; try { // Instantiate the template using the correct TemplateControl tpl.InstantiateIn(cph); } finally { // Revert back to the old templateControl context.TemplateControl = oldControl; } } return cph; } internal override void BuildChildren(object parentObj) { MasterPage masterPage = TemplateControl as MasterPage; // If the page is providing content, don't call the base, which would // instantiate the default content (which we don't want) if (PageProvidesMatchingContent(masterPage)) return; base.BuildChildren(parentObj); } private bool PageProvidesMatchingContent(MasterPage masterPage) { if (masterPage != null && masterPage.ContentTemplates != null && masterPage.ContentTemplates.Contains(_contentPlaceHolderID)) { return true; } return false; } } // Factory used to efficiently create builder instances internal class ContentPlaceHolderBuilderFactory: IWebObjectFactory { object IWebObjectFactory.CreateInstance() { return new ContentPlaceHolderBuilder(); } } [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [ControlBuilderAttribute(typeof(ContentPlaceHolderBuilder))] [Designer("System.Web.UI.Design.WebControls.ContentPlaceHolderDesigner, " + AssemblyRef.SystemDesign)] [ToolboxItemFilter("System.Web.UI")] [ToolboxItemFilter("Microsoft.VisualStudio.Web.WebForms.MasterPageWebFormDesigner", ToolboxItemFilterType.Require)] [ToolboxData("<{0}:ContentPlaceHolder runat=\"server\">{0}:ContentPlaceHolder>")] public class ContentPlaceHolder : Control, INonBindingContainer { } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DetailsViewInsertEventArgs.cs
- StringStorage.cs
- OdbcConnection.cs
- TextCompositionManager.cs
- RenderData.cs
- NonBatchDirectoryCompiler.cs
- DefaultValidator.cs
- WsatTransactionHeader.cs
- BitmapFrameEncode.cs
- Path.cs
- EnumerableCollectionView.cs
- SessionStateUtil.cs
- OciLobLocator.cs
- _UncName.cs
- ImageBrush.cs
- ISCIIEncoding.cs
- SelectingProviderEventArgs.cs
- TextWriterTraceListener.cs
- COM2ExtendedUITypeEditor.cs
- FormCollection.cs
- BaseValidator.cs
- ArrayHelper.cs
- PerfCounters.cs
- InputLanguage.cs
- CatalogUtil.cs
- AttachmentService.cs
- HttpHandlersSection.cs
- StringSorter.cs
- BooleanKeyFrameCollection.cs
- WindowsStreamSecurityBindingElement.cs
- ErrorsHelper.cs
- WebConfigurationHost.cs
- FixedSOMElement.cs
- ServicePointManager.cs
- ShapingWorkspace.cs
- ProcessInfo.cs
- DefaultValueConverter.cs
- FontFamilyIdentifier.cs
- DefaultAssemblyResolver.cs
- AesManaged.cs
- ButtonColumn.cs
- WS2007FederationHttpBindingCollectionElement.cs
- WindowsBrush.cs
- Pair.cs
- XmlStringTable.cs
- ResourceDisplayNameAttribute.cs
- BufferedReadStream.cs
- AsyncDataRequest.cs
- XmlSchemaGroupRef.cs
- HttpCachePolicyBase.cs
- FontDriver.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- ScriptResourceHandler.cs
- UrlRoutingModule.cs
- ContentOperations.cs
- SafeIUnknown.cs
- VoiceSynthesis.cs
- ToolStripPanelRow.cs
- SiteMapHierarchicalDataSourceView.cs
- XmlSerializationWriter.cs
- HttpApplication.cs
- Type.cs
- LinkTarget.cs
- WebCategoryAttribute.cs
- DbgUtil.cs
- UnsafeNativeMethodsPenimc.cs
- TraceListener.cs
- MailAddressParser.cs
- PropertyCollection.cs
- RadioButtonAutomationPeer.cs
- DateTimeValueSerializerContext.cs
- ParserContext.cs
- DESCryptoServiceProvider.cs
- DelegateBodyWriter.cs
- DefaultBinder.cs
- HttpModuleCollection.cs
- InvalidDataException.cs
- XpsResourcePolicy.cs
- EventListener.cs
- AnnotationObservableCollection.cs
- srgsitem.cs
- Crc32.cs
- ObjectDataSourceSelectingEventArgs.cs
- MaterializeFromAtom.cs
- Run.cs
- CodeTypeParameter.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- SerializationHelper.cs
- rsa.cs
- HttpServerProtocol.cs
- AssemblyHash.cs
- SerializationObjectManager.cs
- SqlConnectionString.cs
- FixedSOMLineCollection.cs
- AutomationPeer.cs
- PieceDirectory.cs
- IgnoreFlushAndCloseStream.cs
- GAC.cs
- ThreadStartException.cs
- ResourceManager.cs