Code:
/ FX-1434 / FX-1434 / 1.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
- SafeCertificateStore.cs
- TargetFrameworkAttribute.cs
- MultiView.cs
- StyleBamlRecordReader.cs
- ConfigurationFileMap.cs
- WorkflowEnvironment.cs
- AutoResetEvent.cs
- URL.cs
- DataSourceCache.cs
- HttpModulesSection.cs
- ResXBuildProvider.cs
- TextBoxAutomationPeer.cs
- LayoutUtils.cs
- DependencyObjectProvider.cs
- TableLayoutColumnStyleCollection.cs
- URLAttribute.cs
- StrongNameIdentityPermission.cs
- ToolStripPanelDesigner.cs
- Section.cs
- IApplicationTrustManager.cs
- IdentityValidationException.cs
- XmlExceptionHelper.cs
- ComboBox.cs
- ThrowHelper.cs
- SafeSystemMetrics.cs
- DefinitionUpdate.cs
- SystemNetworkInterface.cs
- ClientEventManager.cs
- RangeBaseAutomationPeer.cs
- OdbcConnectionOpen.cs
- BindingExpressionBase.cs
- SoapSchemaExporter.cs
- CompositeFontParser.cs
- Mapping.cs
- SerialReceived.cs
- control.ime.cs
- BindingListCollectionView.cs
- CreateUserWizardStep.cs
- AppDomainFactory.cs
- FilterEventArgs.cs
- ConfigurationManagerInternal.cs
- Package.cs
- RemoteHelper.cs
- UrlAuthFailedErrorFormatter.cs
- ReflectionPermission.cs
- AnnotationAdorner.cs
- ValidationResult.cs
- SevenBitStream.cs
- ConfigurationValidatorBase.cs
- SByteConverter.cs
- BitmapVisualManager.cs
- Connector.cs
- DataGridViewSelectedRowCollection.cs
- RightsManagementLicense.cs
- HelpFileFileNameEditor.cs
- ServiceDocument.cs
- UnionCqlBlock.cs
- webproxy.cs
- Style.cs
- TPLETWProvider.cs
- ExpressionLink.cs
- IteratorFilter.cs
- SystemEvents.cs
- OdbcFactory.cs
- ToolBarTray.cs
- Span.cs
- ServiceMetadataExtension.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- SettingsBindableAttribute.cs
- CodeTypeReferenceCollection.cs
- CustomBindingCollectionElement.cs
- XmlEncoding.cs
- VariableQuery.cs
- WebHttpSecurity.cs
- TextClipboardData.cs
- ColumnPropertiesGroup.cs
- Transform3DCollection.cs
- WorkflowWebService.cs
- SuppressIldasmAttribute.cs
- KoreanLunisolarCalendar.cs
- SocketSettings.cs
- DomNameTable.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- DataGridViewCellMouseEventArgs.cs
- EmptyElement.cs
- StringUtil.cs
- PointLightBase.cs
- TextElementEnumerator.cs
- TextBoxBase.cs
- SoapFaultCodes.cs
- ProfileProvider.cs
- CustomGrammar.cs
- Wizard.cs
- SHA512Managed.cs
- ItemsChangedEventArgs.cs
- Pair.cs
- AuthenticatingEventArgs.cs
- NativeRightsManagementAPIsStructures.cs
- SelectorAutomationPeer.cs
- AutoCompleteStringCollection.cs