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
- TextServicesHost.cs
- EdmRelationshipRoleAttribute.cs
- _ListenerAsyncResult.cs
- Normalization.cs
- HScrollBar.cs
- ParameterToken.cs
- ConfigXmlAttribute.cs
- HMACSHA384.cs
- ControlCollection.cs
- SamlAttribute.cs
- ExpressionConverter.cs
- Graph.cs
- TagPrefixInfo.cs
- SqlHelper.cs
- MessageQueueConverter.cs
- ViewGenerator.cs
- Positioning.cs
- Variable.cs
- PhysicalOps.cs
- ToolStripDesignerUtils.cs
- XmlSerializerOperationBehavior.cs
- BrushConverter.cs
- WSSecurityOneDotZeroSendSecurityHeader.cs
- xsdvalidator.cs
- WriteTimeStream.cs
- HtmlInputControl.cs
- DisplayInformation.cs
- EmptyReadOnlyDictionaryInternal.cs
- SafeReversePInvokeHandle.cs
- Slider.cs
- Application.cs
- CompletedAsyncResult.cs
- DataRelationCollection.cs
- DataComponentNameHandler.cs
- XmlNodeReader.cs
- UIElement3DAutomationPeer.cs
- BorderGapMaskConverter.cs
- ProfileSection.cs
- DataTemplateKey.cs
- CodeTypeDelegate.cs
- HttpSysSettings.cs
- XamlTemplateSerializer.cs
- HttpModuleAction.cs
- AvtEvent.cs
- GridViewSelectEventArgs.cs
- ScanQueryOperator.cs
- WindowsEditBox.cs
- ToolBarPanel.cs
- AdPostCacheSubstitution.cs
- Vector3D.cs
- InternalSendMessage.cs
- XamlFrame.cs
- DataGridViewElement.cs
- ClassValidator.cs
- ReachSerializerAsync.cs
- XmlIlTypeHelper.cs
- XmlReflectionImporter.cs
- Binding.cs
- PtsHost.cs
- PropertyEmitterBase.cs
- Property.cs
- SchemaImporterExtensionsSection.cs
- NativeMethods.cs
- AnimatedTypeHelpers.cs
- DelegateArgumentValue.cs
- NeutralResourcesLanguageAttribute.cs
- ResourceAssociationTypeEnd.cs
- ListItemParagraph.cs
- ProcessThreadDesigner.cs
- CodeGenerator.cs
- FactoryMaker.cs
- Model3DGroup.cs
- XmlAggregates.cs
- SwitchLevelAttribute.cs
- BamlLocalizableResourceKey.cs
- ContentElement.cs
- XmlSchemaAttributeGroup.cs
- PingOptions.cs
- DocumentSchemaValidator.cs
- XmlSchemaSubstitutionGroup.cs
- SQLBinaryStorage.cs
- EDesignUtil.cs
- ListControlDataBindingHandler.cs
- UserPersonalizationStateInfo.cs
- ZeroOpNode.cs
- HtmlElementCollection.cs
- followingsibling.cs
- HwndSubclass.cs
- HostedElements.cs
- SqlCrossApplyToCrossJoin.cs
- KoreanCalendar.cs
- URL.cs
- AssemblyInfo.cs
- FunctionMappingTranslator.cs
- TriState.cs
- DoubleUtil.cs
- DataListCommandEventArgs.cs
- _NetworkingPerfCounters.cs
- RawMouseInputReport.cs
- SQLByte.cs