//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.UI.WebControls.WebParts { using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Globalization; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Util; [ Designer("System.Web.UI.Design.WebControls.WebParts.EditorZoneDesigner, " + AssemblyRef.SystemDesign), SupportsEventValidation, ] public class EditorZone : EditorZoneBase { private ITemplate _zoneTemplate; protected override EditorPartCollection CreateEditorParts() { EditorPartCollection editorParts = new EditorPartCollection(); if (_zoneTemplate != null) { // PERF: Instantiate the template into a special control, that does nothing when a child control // is added. This is more performant because the child control is never parented to the temporary // control, it's ID is never generated, etc. Control container = new NonParentingControl(); _zoneTemplate.InstantiateIn(container); if (container.HasControls()) { foreach (Control control in container.Controls) { EditorPart part = control as EditorPart; if (part != null) { editorParts.Add(part); } else { LiteralControl literal = control as LiteralControl; // Throw an exception if it is *not* a literal containing only whitespace // Don't throw an exception in the designer, since we want only the offending // control to render as an error block, not the whole EditorZone. if (((literal == null) || (literal.Text.Trim().Length != 0)) && !DesignMode) { throw new InvalidOperationException(SR.GetString(SR.EditorZone_OnlyEditorParts, ID)); } } } } } return editorParts; } [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(EditorZone)), TemplateInstance(TemplateInstance.Single) ] public virtual ITemplate ZoneTemplate { get { return _zoneTemplate; } set { InvalidateEditorParts(); _zoneTemplate = value; } } } }