WebZone.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / UI / WebParts / WebZone.cs / 1 / WebZone.cs

                            //------------------------------------------------------------------------------ 
// 
//     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.Drawing.Design;
    using System.Globalization; 
    using System.Security.Permissions;
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.Util;
 
    /// 
    /// Base class for all zone classes in the WebPart framework.  Contains properties used to control the UI
    /// which is common to all zone classes.
    ///  
    [
    Designer("System.Web.UI.Design.WebControls.WebParts.WebZoneDesigner, " + AssemblyRef.SystemDesign), 
    Bindable(false), 
    ]
    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    public abstract class WebZone : CompositeControl {

        private WebPartManager _webPartManager; 

        private const int baseIndex = 0; 
        private const int emptyZoneTextStyleIndex = 1; 
        private const int footerStyleIndex = 2;
        private const int partStyleIndex = 3; 
        private const int partChromeStyleIndex = 4;
        private const int partTitleStyleIndex = 5;
        private const int headerStyleIndex = 6;
        private const int verbStyleIndex = 7; 
        private const int errorStyleIndex = 8;
        private const int viewStateArrayLength = 9; 
 
        private Style _emptyZoneTextStyle;
        private TitleStyle _footerStyle; 
        private TableStyle _partStyle;
        private Style _partChromeStyle;
        private TitleStyle _partTitleStyle;
        private TitleStyle _headerStyle; 
        private Style _verbStyle;
        private Style _errorStyle; 
 
        // Prevent class from being subclassed outside of our assembly
        internal WebZone() { 
        }

        /// 
        /// The URL of the background image for the control. 
        /// 
        [ 
        DefaultValue(""), 
        Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)),
        UrlProperty(), 
        WebCategory("Appearance"),
        WebSysDescription(SR.WebControl_BackImageUrl)
        ]
        public virtual string BackImageUrl { 
            get {
                string s = (string)ViewState["BackImageUrl"]; 
                return((s == null) ? String.Empty : s); 
            }
            set { 
                ViewState["BackImageUrl"] = value;
            }
        }
 
        [
        // Must use WebSysDefaultValue instead of DefaultValue, since it is overridden in extending classes 
        Localizable(true), 
        WebSysDefaultValue(""),
        WebCategory("Behavior"), 
        WebSysDescription(SR.Zone_EmptyZoneText),
        ]
        public virtual string EmptyZoneText {
            get { 
                string s = (string)ViewState["EmptyZoneText"];
                return((s == null) ? String.Empty : s); 
            } 
            set {
                ViewState["EmptyZoneText"] = value; 
            }
        }

        [ 
        DefaultValue(null),
        NotifyParentProperty(true), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"), 
        WebSysDescription(SR.Zone_EmptyZoneTextStyle),
        ]
        public Style EmptyZoneTextStyle {
            get { 
                if (_emptyZoneTextStyle == null) {
                    _emptyZoneTextStyle = new Style(); 
                    if (IsTrackingViewState) { 
                        ((IStateManager)_emptyZoneTextStyle).TrackViewState();
                    } 
                }

                return _emptyZoneTextStyle;
            } 
        }
 
        [ 
        DefaultValue(null),
        NotifyParentProperty(true), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"),
        WebSysDescription(SR.Zone_ErrorStyle), 
        ]
        public Style ErrorStyle { 
            get { 
                if (_errorStyle == null) {
                    _errorStyle = new ErrorStyle(); 
                    if (IsTrackingViewState) {
                        ((IStateManager)_errorStyle).TrackViewState();
                    }
                } 

                return _errorStyle; 
            } 
        }
 
        /// 
        /// Style for the footer of the zone.
        /// 
        [ 
        DefaultValue(null),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"), 
        WebSysDescription(SR.Zone_FooterStyle)
        ]
        public TitleStyle FooterStyle {
            get { 
                if (_footerStyle == null) {
                    _footerStyle = new TitleStyle(); 
                    if (IsTrackingViewState) { 
                        ((IStateManager)_footerStyle).TrackViewState();
                    } 
                }

                return _footerStyle;
            } 
        }
 
        protected virtual bool HasFooter { 
            get {
                return true; 
            }
        }

        protected virtual bool HasHeader { 
            get {
                return true; 
            } 
        }
 
        /// 
        /// The header text of the zone.
        /// 
        [ 
        // Must use WebSysDefaultValue instead of DefaultValue, since it is overridden in extending classes
        Localizable(true), 
        WebSysDefaultValue(""), 
        WebCategory("Appearance"),
        WebSysDescription(SR.Zone_HeaderText) 
        ]
        public virtual string HeaderText {
            get {
                string s = (string)ViewState["HeaderText"]; 
                return((s == null) ? String.Empty : s);
            } 
            set { 
                ViewState["HeaderText"] = value;
            } 
        }

        /// 
        /// Style for the title bar of the zone. 
        /// 
        [ 
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"),
        WebSysDescription(SR.Zone_HeaderStyle)
        ] 
        public TitleStyle HeaderStyle {
            get { 
                if (_headerStyle == null) { 
                    _headerStyle = new TitleStyle();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_headerStyle).TrackViewState();
                    }
                }
 
                return _headerStyle;
            } 
        } 

        ///  
        /// Padding for the contained parts.
        /// 
        [
        DefaultValue(typeof(Unit), "5px"), 
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartChromePadding) 
        ] 
        public Unit PartChromePadding {
            get { 
                object obj = ViewState["PartChromePadding"];
                return (obj == null) ? Unit.Pixel(5) : (Unit)obj;
            }
            set { 
                if (value.Value < 0) {
                    throw new ArgumentOutOfRangeException("value"); 
                } 
                ViewState["PartChromePadding"] = value;
            } 
        }

        /// 
        /// Style for the contained parts. 
        /// 
        [ 
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartChromeStyle)
        ] 
        public Style PartChromeStyle {
            get { 
                if (_partChromeStyle == null) { 
                    _partChromeStyle = new Style();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_partChromeStyle).TrackViewState();
                    }
                }
 
                return _partChromeStyle;
            } 
        } 

        ///  
        /// The type of frame/border for the contained parts.
        /// 
        [
        DefaultValue(PartChromeType.Default), 
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartChromeType) 
        ] 
        public virtual PartChromeType PartChromeType {
            get { 
                object o = ViewState["PartChromeType"];
                return (o != null) ? (PartChromeType)(int)o : PartChromeType.Default;
            }
            set { 
                if ((value < PartChromeType.Default) || (value > PartChromeType.BorderOnly)) {
                    throw new ArgumentOutOfRangeException("value"); 
                } 
                ViewState["PartChromeType"] = (int)value;
            } 
        }

        /// 
        /// Style for the contents of the contained parts. 
        /// 
        [ 
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartStyle)
        ] 
        public TableStyle PartStyle {
            get { 
                if (_partStyle == null) { 
                    _partStyle = new TableStyle();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_partStyle).TrackViewState();
                    }
                }
 
                return _partStyle;
            } 
        } 

        ///  
        /// Style for the title bars of the contained parts.
        /// 
        [
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty), 
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartTitleStyle) 
        ]
        public TitleStyle PartTitleStyle {
            get {
                if (_partTitleStyle == null) { 
                    _partTitleStyle = new TitleStyle();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_partTitleStyle).TrackViewState(); 
                    }
                } 

                return _partTitleStyle;
            }
        } 

        protected override HtmlTextWriterTag TagKey { 
            get { 
                return HtmlTextWriterTag.Table;
            } 
        }

        // Padding = -1 means we will not render anything for the cellpadding attribute
        [ 
        DefaultValue(2),
        WebCategory("Layout"), 
        WebSysDescription(SR.Zone_Padding), 
        ]
        public virtual int Padding { 
            get {
                object obj = ViewState["Padding"];
                return (obj == null) ? 2 : (int) obj;
            } 
            set {
                if (value < -1) { 
                    throw new ArgumentOutOfRangeException("value"); 
                }
                ViewState["Padding"] = value; 
            }
        }

        // Called by WebPartZoneBase, EditorZoneBase, CatalogZoneBase, and ConnectionsZone. 
        internal void RenderBodyTableBeginTag(HtmlTextWriter writer) {
            // 
 

            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0"); 
            int padding = Padding;
            if (padding >= 0) {
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, padding.ToString(CultureInfo.InvariantCulture));
            } 
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
 
            // Copied from Panel.cs 
            //
            string backImageUrl = BackImageUrl; 
            // Whidbey 12856
            if (backImageUrl.Trim().Length > 0)
                writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundImage,"url(" + ResolveClientUrl(backImageUrl) + ")");
 
            // Needed if Zone HeaderText is wider than contained Parts
            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%"); 
 
            // Needed if the height of the Zone is taller than the height of its contents
            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%"); 

            writer.RenderBeginTag(HtmlTextWriterTag.Table);
        }
 
        // Called by WebPartZoneBase, EditorZoneBase, CatalogZoneBase, and ConnectionsZone.
        internal static void RenderBodyTableEndTag(HtmlTextWriter writer) { 
            writer.RenderEndTag();  // Table 
        }
 
        // Called by WebPartZoneBase, EditorZoneBase, and CatalogZoneBase.
        internal void RenderDesignerRegionBeginTag(HtmlTextWriter writer, Orientation orientation) {
            writer.AddAttribute(HtmlTextWriterAttribute.Valign, "top");
            writer.RenderBeginTag(HtmlTextWriterTag.Tr); 
            if (orientation == Orientation.Horizontal) {
                writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap"); 
            } 
            writer.AddAttribute(HtmlTextWriterAttribute.DesignerRegion, "0");
            writer.RenderBeginTag(HtmlTextWriterTag.Td); 
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, Padding.ToString(CultureInfo.InvariantCulture));
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
            if (orientation == Orientation.Vertical) { 
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            } 
            else { 
                writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%");
            } 
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
        }

        // Called by WebPartZoneBase, EditorZoneBase, and CatalogZoneBase. 
        internal static void RenderDesignerRegionEndTag(HtmlTextWriter writer) {
            writer.RenderEndTag(); // Table 
            writer.RenderEndTag(); // Td 
            writer.RenderEndTag(); // Tr
        } 

        protected internal bool RenderClientScript {
            get {
                bool renderClientScript = false; 
                if (DesignMode) {
                    renderClientScript = true; 
                } 
                else if (WebPartManager != null) {
                    renderClientScript = WebPartManager.RenderClientScript; 
                }
                return renderClientScript;
            }
        } 

        ///  
        /// The type of the button rendered for each verb. 
        /// 
        [ 
        DefaultValue(ButtonType.Button),
        WebCategory("Appearance"),
        WebSysDescription(SR.Zone_VerbButtonType),
        ] 
        public virtual ButtonType VerbButtonType {
            get { 
                object obj = ViewState["VerbButtonType"]; 
                return (obj == null) ? ButtonType.Button : (ButtonType)obj;
            } 
            set {
                if (value < ButtonType.Button || value > ButtonType.Link) {
                    throw new ArgumentOutOfRangeException("value");
                } 
                ViewState["VerbButtonType"] = value;
            } 
        } 

        [ 
        DefaultValue(null),
        NotifyParentProperty(true),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty), 
        WebCategory("Styles"),
        WebSysDescription(SR.Zone_VerbStyle), 
        ] 
        public Style VerbStyle {
            get { 
                if (_verbStyle == null) {
                    _verbStyle = new Style();
                    if (IsTrackingViewState) {
                        ((IStateManager)_verbStyle).TrackViewState(); 
                    }
                } 
 
                return _verbStyle;
            } 
        }

        /// 
        /// The effective chrome type of a part, taking into consideration the PartChromeType 
        /// of the zone and the DisplayMode of the page.
        ///  
        public virtual PartChromeType GetEffectiveChromeType(Part part) { 
            if (part == null) {
                throw new ArgumentNullException("part"); 
            }

            PartChromeType chromeType = part.ChromeType;
            if (chromeType == PartChromeType.Default) { 
                PartChromeType partChromeType = PartChromeType;
                if (partChromeType == PartChromeType.Default) { 
                    chromeType = PartChromeType.TitleAndBorder; 
                }
                else { 
                    chromeType = partChromeType;
                }
            }
 
            Debug.Assert(chromeType != PartChromeType.Default);
            return chromeType; 
        } 

        protected override void LoadViewState(object savedState) { 
            if (savedState == null) {
                base.LoadViewState(null);
            }
            else { 
                object[] myState = (object[]) savedState;
                if (myState.Length != viewStateArrayLength) { 
                    throw new ArgumentException(SR.GetString(SR.ViewState_InvalidViewState)); 
                }
 
                base.LoadViewState(myState[baseIndex]);
                if (myState[emptyZoneTextStyleIndex] != null) {
                    ((IStateManager) EmptyZoneTextStyle).LoadViewState(myState[emptyZoneTextStyleIndex]);
                } 
                if (myState[footerStyleIndex] != null) {
                    ((IStateManager) FooterStyle).LoadViewState(myState[footerStyleIndex]); 
                } 
                if (myState[partStyleIndex] != null) {
                    ((IStateManager) PartStyle).LoadViewState(myState[partStyleIndex]); 
                }
                if (myState[partChromeStyleIndex] != null) {
                    ((IStateManager) PartChromeStyle).LoadViewState(myState[partChromeStyleIndex]);
                } 
                if (myState[partTitleStyleIndex] != null) {
                    ((IStateManager) PartTitleStyle).LoadViewState(myState[partTitleStyleIndex]); 
                } 
                if (myState[headerStyleIndex] != null) {
                    ((IStateManager) HeaderStyle).LoadViewState(myState[headerStyleIndex]); 
                }
                if (myState[verbStyleIndex] != null) {
                    ((IStateManager) VerbStyle).LoadViewState(myState[verbStyleIndex]);
                } 
                if (myState[errorStyleIndex] != null) {
                    ((IStateManager) ErrorStyle).LoadViewState(myState[errorStyleIndex]); 
                } 
            }
        } 

        protected internal override void OnInit(EventArgs e) {
            base.OnInit(e);
 
            Page page = Page;
            Debug.Assert(page != null); 
            if (page != null) { 
                if (page.ControlState >= ControlState.Initialized && !DesignMode) {
                    throw new InvalidOperationException(SR.GetString(SR.Zone_AddedTooLate)); 
                }

                if (!DesignMode) {
                    _webPartManager = WebPartManager.GetCurrentWebPartManager(page); 
                    if (_webPartManager == null) {
                        throw new InvalidOperationException(SR.GetString(SR.WebPartManagerRequired)); 
                    } 

                    _webPartManager.RegisterZone(this); 
                }
            }
        }
 
        protected internal override void OnPreRender(EventArgs e) {
            base.OnPreRender(e); 
 
            Control parent = Parent;
            Debug.Assert(parent != null); 
            if (parent != null && (parent is WebZone || parent is Part)) {
                throw new InvalidOperationException(SR.GetString(SR.Zone_InvalidParent));
            }
        } 

        public override void RenderBeginTag(HtmlTextWriter writer) { 
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0"); 
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0"); 

            // On Mac IE, if height is not set, render height:1px, so the table sizes to contents.
            // Otherwise, Mac IE may give the table an arbitrary height (equal to the width of its contents).
            if (!DesignMode && 
                Page != null &&
                Page.Request.Browser.Type == "IE5" && 
                Page.Request.Browser.Platform == "MacPPC" && 
                (!ControlStyleCreated || ControlStyle.Height == Unit.Empty)) {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "1px"); 
            }

            // Render 
            base.RenderBeginTag(writer); 
        }
 
        protected internal override void RenderContents(HtmlTextWriter writer) { 
            if (HasHeader) {
                writer.RenderBeginTag(HtmlTextWriterTag.Tr); 
                TitleStyle headerStyle = HeaderStyle;
                if (!headerStyle.IsEmpty) {
                    headerStyle.AddAttributesToRender(writer, this);
                } 
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                RenderHeader(writer); 
                writer.RenderEndTag();  // Td 
                writer.RenderEndTag();  // Tr
            } 

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);

            // We want the body to fill the height of the zone, and squish the header and footer 
            // to the size of their contents
            // Mac IE needs height=100% set on  
            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%"); 

            writer.RenderBeginTag(HtmlTextWriterTag.Td); 
            RenderBody(writer);
            writer.RenderEndTag();  // Td
            writer.RenderEndTag();  // Tr
 
            if (HasFooter) {
                writer.RenderBeginTag(HtmlTextWriterTag.Tr); 
                TitleStyle footerStyle = FooterStyle; 
                if (!footerStyle.IsEmpty) {
                    footerStyle.AddAttributesToRender(writer, this); 
                }
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                RenderFooter(writer);
                writer.RenderEndTag();  // Td 
                writer.RenderEndTag();  // Tr
            } 
        } 

        protected virtual void RenderHeader(HtmlTextWriter writer) { 
        }

        protected virtual void RenderBody(HtmlTextWriter writer) {
        } 

        protected virtual void RenderFooter(HtmlTextWriter writer) { 
        } 

        protected override object SaveViewState() { 
            object[] myState = new object[viewStateArrayLength];

            myState[baseIndex] = base.SaveViewState();
            myState[emptyZoneTextStyleIndex] = (_emptyZoneTextStyle != null) ? ((IStateManager)_emptyZoneTextStyle).SaveViewState() : null; 
            myState[footerStyleIndex] = (_footerStyle != null) ? ((IStateManager)_footerStyle).SaveViewState() : null;
            myState[partStyleIndex] = (_partStyle != null) ? ((IStateManager)_partStyle).SaveViewState() : null; 
            myState[partChromeStyleIndex] = (_partChromeStyle != null) ? ((IStateManager)_partChromeStyle).SaveViewState() : null; 
            myState[partTitleStyleIndex] = (_partTitleStyle != null) ? ((IStateManager)_partTitleStyle).SaveViewState() : null;
            myState[headerStyleIndex] = (_headerStyle != null) ? ((IStateManager)_headerStyle).SaveViewState() : null; 
            myState[verbStyleIndex] = (_verbStyle != null) ? ((IStateManager)_verbStyle).SaveViewState() : null;
            myState[errorStyleIndex] = (_errorStyle != null) ? ((IStateManager)_errorStyle).SaveViewState() : null;

            for (int i=0; i < viewStateArrayLength; i++) { 
                if (myState[i] != null) {
                    return myState; 
                } 
            }
 
            // More performant to return null than an array of null values
            return null;
        }
 
        protected override void TrackViewState() {
            base.TrackViewState(); 
 
            if (_emptyZoneTextStyle != null) {
                ((IStateManager) _emptyZoneTextStyle).TrackViewState(); 
            }
            if (_footerStyle != null) {
                ((IStateManager) _footerStyle).TrackViewState();
            } 
            if (_partStyle != null) {
                ((IStateManager) _partStyle).TrackViewState(); 
            } 
            if (_partChromeStyle != null) {
                ((IStateManager) _partChromeStyle).TrackViewState(); 
            }
            if (_partTitleStyle != null) {
                ((IStateManager) _partTitleStyle).TrackViewState();
            } 
            if (_headerStyle != null) {
                ((IStateManager) _headerStyle).TrackViewState(); 
            } 
            if (_verbStyle != null) {
                ((IStateManager) _verbStyle).TrackViewState(); 
            }
            if (_errorStyle != null) {
                ((IStateManager) _errorStyle).TrackViewState();
            } 
        }
 
        protected WebPartManager WebPartManager { 
            get {
                return _webPartManager; 
            }
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     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.Drawing.Design;
    using System.Globalization; 
    using System.Security.Permissions;
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.Util;
 
    /// 
    /// Base class for all zone classes in the WebPart framework.  Contains properties used to control the UI
    /// which is common to all zone classes.
    ///  
    [
    Designer("System.Web.UI.Design.WebControls.WebParts.WebZoneDesigner, " + AssemblyRef.SystemDesign), 
    Bindable(false), 
    ]
    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    public abstract class WebZone : CompositeControl {

        private WebPartManager _webPartManager; 

        private const int baseIndex = 0; 
        private const int emptyZoneTextStyleIndex = 1; 
        private const int footerStyleIndex = 2;
        private const int partStyleIndex = 3; 
        private const int partChromeStyleIndex = 4;
        private const int partTitleStyleIndex = 5;
        private const int headerStyleIndex = 6;
        private const int verbStyleIndex = 7; 
        private const int errorStyleIndex = 8;
        private const int viewStateArrayLength = 9; 
 
        private Style _emptyZoneTextStyle;
        private TitleStyle _footerStyle; 
        private TableStyle _partStyle;
        private Style _partChromeStyle;
        private TitleStyle _partTitleStyle;
        private TitleStyle _headerStyle; 
        private Style _verbStyle;
        private Style _errorStyle; 
 
        // Prevent class from being subclassed outside of our assembly
        internal WebZone() { 
        }

        /// 
        /// The URL of the background image for the control. 
        /// 
        [ 
        DefaultValue(""), 
        Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)),
        UrlProperty(), 
        WebCategory("Appearance"),
        WebSysDescription(SR.WebControl_BackImageUrl)
        ]
        public virtual string BackImageUrl { 
            get {
                string s = (string)ViewState["BackImageUrl"]; 
                return((s == null) ? String.Empty : s); 
            }
            set { 
                ViewState["BackImageUrl"] = value;
            }
        }
 
        [
        // Must use WebSysDefaultValue instead of DefaultValue, since it is overridden in extending classes 
        Localizable(true), 
        WebSysDefaultValue(""),
        WebCategory("Behavior"), 
        WebSysDescription(SR.Zone_EmptyZoneText),
        ]
        public virtual string EmptyZoneText {
            get { 
                string s = (string)ViewState["EmptyZoneText"];
                return((s == null) ? String.Empty : s); 
            } 
            set {
                ViewState["EmptyZoneText"] = value; 
            }
        }

        [ 
        DefaultValue(null),
        NotifyParentProperty(true), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"), 
        WebSysDescription(SR.Zone_EmptyZoneTextStyle),
        ]
        public Style EmptyZoneTextStyle {
            get { 
                if (_emptyZoneTextStyle == null) {
                    _emptyZoneTextStyle = new Style(); 
                    if (IsTrackingViewState) { 
                        ((IStateManager)_emptyZoneTextStyle).TrackViewState();
                    } 
                }

                return _emptyZoneTextStyle;
            } 
        }
 
        [ 
        DefaultValue(null),
        NotifyParentProperty(true), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"),
        WebSysDescription(SR.Zone_ErrorStyle), 
        ]
        public Style ErrorStyle { 
            get { 
                if (_errorStyle == null) {
                    _errorStyle = new ErrorStyle(); 
                    if (IsTrackingViewState) {
                        ((IStateManager)_errorStyle).TrackViewState();
                    }
                } 

                return _errorStyle; 
            } 
        }
 
        /// 
        /// Style for the footer of the zone.
        /// 
        [ 
        DefaultValue(null),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"), 
        WebSysDescription(SR.Zone_FooterStyle)
        ]
        public TitleStyle FooterStyle {
            get { 
                if (_footerStyle == null) {
                    _footerStyle = new TitleStyle(); 
                    if (IsTrackingViewState) { 
                        ((IStateManager)_footerStyle).TrackViewState();
                    } 
                }

                return _footerStyle;
            } 
        }
 
        protected virtual bool HasFooter { 
            get {
                return true; 
            }
        }

        protected virtual bool HasHeader { 
            get {
                return true; 
            } 
        }
 
        /// 
        /// The header text of the zone.
        /// 
        [ 
        // Must use WebSysDefaultValue instead of DefaultValue, since it is overridden in extending classes
        Localizable(true), 
        WebSysDefaultValue(""), 
        WebCategory("Appearance"),
        WebSysDescription(SR.Zone_HeaderText) 
        ]
        public virtual string HeaderText {
            get {
                string s = (string)ViewState["HeaderText"]; 
                return((s == null) ? String.Empty : s);
            } 
            set { 
                ViewState["HeaderText"] = value;
            } 
        }

        /// 
        /// Style for the title bar of the zone. 
        /// 
        [ 
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("Styles"),
        WebSysDescription(SR.Zone_HeaderStyle)
        ] 
        public TitleStyle HeaderStyle {
            get { 
                if (_headerStyle == null) { 
                    _headerStyle = new TitleStyle();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_headerStyle).TrackViewState();
                    }
                }
 
                return _headerStyle;
            } 
        } 

        ///  
        /// Padding for the contained parts.
        /// 
        [
        DefaultValue(typeof(Unit), "5px"), 
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartChromePadding) 
        ] 
        public Unit PartChromePadding {
            get { 
                object obj = ViewState["PartChromePadding"];
                return (obj == null) ? Unit.Pixel(5) : (Unit)obj;
            }
            set { 
                if (value.Value < 0) {
                    throw new ArgumentOutOfRangeException("value"); 
                } 
                ViewState["PartChromePadding"] = value;
            } 
        }

        /// 
        /// Style for the contained parts. 
        /// 
        [ 
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartChromeStyle)
        ] 
        public Style PartChromeStyle {
            get { 
                if (_partChromeStyle == null) { 
                    _partChromeStyle = new Style();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_partChromeStyle).TrackViewState();
                    }
                }
 
                return _partChromeStyle;
            } 
        } 

        ///  
        /// The type of frame/border for the contained parts.
        /// 
        [
        DefaultValue(PartChromeType.Default), 
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartChromeType) 
        ] 
        public virtual PartChromeType PartChromeType {
            get { 
                object o = ViewState["PartChromeType"];
                return (o != null) ? (PartChromeType)(int)o : PartChromeType.Default;
            }
            set { 
                if ((value < PartChromeType.Default) || (value > PartChromeType.BorderOnly)) {
                    throw new ArgumentOutOfRangeException("value"); 
                } 
                ViewState["PartChromeType"] = (int)value;
            } 
        }

        /// 
        /// Style for the contents of the contained parts. 
        /// 
        [ 
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty),
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartStyle)
        ] 
        public TableStyle PartStyle {
            get { 
                if (_partStyle == null) { 
                    _partStyle = new TableStyle();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_partStyle).TrackViewState();
                    }
                }
 
                return _partStyle;
            } 
        } 

        ///  
        /// Style for the title bars of the contained parts.
        /// 
        [
        DefaultValue(null), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        NotifyParentProperty(true), 
        PersistenceMode(PersistenceMode.InnerProperty), 
        WebCategory("WebPart"),
        WebSysDescription(SR.Zone_PartTitleStyle) 
        ]
        public TitleStyle PartTitleStyle {
            get {
                if (_partTitleStyle == null) { 
                    _partTitleStyle = new TitleStyle();
                    if (IsTrackingViewState) { 
                        ((IStateManager)_partTitleStyle).TrackViewState(); 
                    }
                } 

                return _partTitleStyle;
            }
        } 

        protected override HtmlTextWriterTag TagKey { 
            get { 
                return HtmlTextWriterTag.Table;
            } 
        }

        // Padding = -1 means we will not render anything for the cellpadding attribute
        [ 
        DefaultValue(2),
        WebCategory("Layout"), 
        WebSysDescription(SR.Zone_Padding), 
        ]
        public virtual int Padding { 
            get {
                object obj = ViewState["Padding"];
                return (obj == null) ? 2 : (int) obj;
            } 
            set {
                if (value < -1) { 
                    throw new ArgumentOutOfRangeException("value"); 
                }
                ViewState["Padding"] = value; 
            }
        }

        // Called by WebPartZoneBase, EditorZoneBase, CatalogZoneBase, and ConnectionsZone. 
        internal void RenderBodyTableBeginTag(HtmlTextWriter writer) {
            // 
 

            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0"); 
            int padding = Padding;
            if (padding >= 0) {
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, padding.ToString(CultureInfo.InvariantCulture));
            } 
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
 
            // Copied from Panel.cs 
            //
            string backImageUrl = BackImageUrl; 
            // Whidbey 12856
            if (backImageUrl.Trim().Length > 0)
                writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundImage,"url(" + ResolveClientUrl(backImageUrl) + ")");
 
            // Needed if Zone HeaderText is wider than contained Parts
            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%"); 
 
            // Needed if the height of the Zone is taller than the height of its contents
            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%"); 

            writer.RenderBeginTag(HtmlTextWriterTag.Table);
        }
 
        // Called by WebPartZoneBase, EditorZoneBase, CatalogZoneBase, and ConnectionsZone.
        internal static void RenderBodyTableEndTag(HtmlTextWriter writer) { 
            writer.RenderEndTag();  // Table 
        }
 
        // Called by WebPartZoneBase, EditorZoneBase, and CatalogZoneBase.
        internal void RenderDesignerRegionBeginTag(HtmlTextWriter writer, Orientation orientation) {
            writer.AddAttribute(HtmlTextWriterAttribute.Valign, "top");
            writer.RenderBeginTag(HtmlTextWriterTag.Tr); 
            if (orientation == Orientation.Horizontal) {
                writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap"); 
            } 
            writer.AddAttribute(HtmlTextWriterAttribute.DesignerRegion, "0");
            writer.RenderBeginTag(HtmlTextWriterTag.Td); 
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, Padding.ToString(CultureInfo.InvariantCulture));
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
            if (orientation == Orientation.Vertical) { 
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            } 
            else { 
                writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%");
            } 
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
        }

        // Called by WebPartZoneBase, EditorZoneBase, and CatalogZoneBase. 
        internal static void RenderDesignerRegionEndTag(HtmlTextWriter writer) {
            writer.RenderEndTag(); // Table 
            writer.RenderEndTag(); // Td 
            writer.RenderEndTag(); // Tr
        } 

        protected internal bool RenderClientScript {
            get {
                bool renderClientScript = false; 
                if (DesignMode) {
                    renderClientScript = true; 
                } 
                else if (WebPartManager != null) {
                    renderClientScript = WebPartManager.RenderClientScript; 
                }
                return renderClientScript;
            }
        } 

        ///  
        /// The type of the button rendered for each verb. 
        /// 
        [ 
        DefaultValue(ButtonType.Button),
        WebCategory("Appearance"),
        WebSysDescription(SR.Zone_VerbButtonType),
        ] 
        public virtual ButtonType VerbButtonType {
            get { 
                object obj = ViewState["VerbButtonType"]; 
                return (obj == null) ? ButtonType.Button : (ButtonType)obj;
            } 
            set {
                if (value < ButtonType.Button || value > ButtonType.Link) {
                    throw new ArgumentOutOfRangeException("value");
                } 
                ViewState["VerbButtonType"] = value;
            } 
        } 

        [ 
        DefaultValue(null),
        NotifyParentProperty(true),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty), 
        WebCategory("Styles"),
        WebSysDescription(SR.Zone_VerbStyle), 
        ] 
        public Style VerbStyle {
            get { 
                if (_verbStyle == null) {
                    _verbStyle = new Style();
                    if (IsTrackingViewState) {
                        ((IStateManager)_verbStyle).TrackViewState(); 
                    }
                } 
 
                return _verbStyle;
            } 
        }

        /// 
        /// The effective chrome type of a part, taking into consideration the PartChromeType 
        /// of the zone and the DisplayMode of the page.
        ///  
        public virtual PartChromeType GetEffectiveChromeType(Part part) { 
            if (part == null) {
                throw new ArgumentNullException("part"); 
            }

            PartChromeType chromeType = part.ChromeType;
            if (chromeType == PartChromeType.Default) { 
                PartChromeType partChromeType = PartChromeType;
                if (partChromeType == PartChromeType.Default) { 
                    chromeType = PartChromeType.TitleAndBorder; 
                }
                else { 
                    chromeType = partChromeType;
                }
            }
 
            Debug.Assert(chromeType != PartChromeType.Default);
            return chromeType; 
        } 

        protected override void LoadViewState(object savedState) { 
            if (savedState == null) {
                base.LoadViewState(null);
            }
            else { 
                object[] myState = (object[]) savedState;
                if (myState.Length != viewStateArrayLength) { 
                    throw new ArgumentException(SR.GetString(SR.ViewState_InvalidViewState)); 
                }
 
                base.LoadViewState(myState[baseIndex]);
                if (myState[emptyZoneTextStyleIndex] != null) {
                    ((IStateManager) EmptyZoneTextStyle).LoadViewState(myState[emptyZoneTextStyleIndex]);
                } 
                if (myState[footerStyleIndex] != null) {
                    ((IStateManager) FooterStyle).LoadViewState(myState[footerStyleIndex]); 
                } 
                if (myState[partStyleIndex] != null) {
                    ((IStateManager) PartStyle).LoadViewState(myState[partStyleIndex]); 
                }
                if (myState[partChromeStyleIndex] != null) {
                    ((IStateManager) PartChromeStyle).LoadViewState(myState[partChromeStyleIndex]);
                } 
                if (myState[partTitleStyleIndex] != null) {
                    ((IStateManager) PartTitleStyle).LoadViewState(myState[partTitleStyleIndex]); 
                } 
                if (myState[headerStyleIndex] != null) {
                    ((IStateManager) HeaderStyle).LoadViewState(myState[headerStyleIndex]); 
                }
                if (myState[verbStyleIndex] != null) {
                    ((IStateManager) VerbStyle).LoadViewState(myState[verbStyleIndex]);
                } 
                if (myState[errorStyleIndex] != null) {
                    ((IStateManager) ErrorStyle).LoadViewState(myState[errorStyleIndex]); 
                } 
            }
        } 

        protected internal override void OnInit(EventArgs e) {
            base.OnInit(e);
 
            Page page = Page;
            Debug.Assert(page != null); 
            if (page != null) { 
                if (page.ControlState >= ControlState.Initialized && !DesignMode) {
                    throw new InvalidOperationException(SR.GetString(SR.Zone_AddedTooLate)); 
                }

                if (!DesignMode) {
                    _webPartManager = WebPartManager.GetCurrentWebPartManager(page); 
                    if (_webPartManager == null) {
                        throw new InvalidOperationException(SR.GetString(SR.WebPartManagerRequired)); 
                    } 

                    _webPartManager.RegisterZone(this); 
                }
            }
        }
 
        protected internal override void OnPreRender(EventArgs e) {
            base.OnPreRender(e); 
 
            Control parent = Parent;
            Debug.Assert(parent != null); 
            if (parent != null && (parent is WebZone || parent is Part)) {
                throw new InvalidOperationException(SR.GetString(SR.Zone_InvalidParent));
            }
        } 

        public override void RenderBeginTag(HtmlTextWriter writer) { 
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0"); 
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0"); 

            // On Mac IE, if height is not set, render height:1px, so the table sizes to contents.
            // Otherwise, Mac IE may give the table an arbitrary height (equal to the width of its contents).
            if (!DesignMode && 
                Page != null &&
                Page.Request.Browser.Type == "IE5" && 
                Page.Request.Browser.Platform == "MacPPC" && 
                (!ControlStyleCreated || ControlStyle.Height == Unit.Empty)) {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "1px"); 
            }

            // Render 
instead of
base.RenderBeginTag(writer); } protected internal override void RenderContents(HtmlTextWriter writer) { if (HasHeader) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); TitleStyle headerStyle = HeaderStyle; if (!headerStyle.IsEmpty) { headerStyle.AddAttributesToRender(writer, this); } writer.RenderBeginTag(HtmlTextWriterTag.Td); RenderHeader(writer); writer.RenderEndTag(); // Td writer.RenderEndTag(); // Tr } writer.RenderBeginTag(HtmlTextWriterTag.Tr); // We want the body to fill the height of the zone, and squish the header and footer // to the size of their contents // Mac IE needs height=100% set on writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%"); writer.RenderBeginTag(HtmlTextWriterTag.Td); RenderBody(writer); writer.RenderEndTag(); // Td writer.RenderEndTag(); // Tr if (HasFooter) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); TitleStyle footerStyle = FooterStyle; if (!footerStyle.IsEmpty) { footerStyle.AddAttributesToRender(writer, this); } writer.RenderBeginTag(HtmlTextWriterTag.Td); RenderFooter(writer); writer.RenderEndTag(); // Td writer.RenderEndTag(); // Tr } } protected virtual void RenderHeader(HtmlTextWriter writer) { } protected virtual void RenderBody(HtmlTextWriter writer) { } protected virtual void RenderFooter(HtmlTextWriter writer) { } protected override object SaveViewState() { object[] myState = new object[viewStateArrayLength]; myState[baseIndex] = base.SaveViewState(); myState[emptyZoneTextStyleIndex] = (_emptyZoneTextStyle != null) ? ((IStateManager)_emptyZoneTextStyle).SaveViewState() : null; myState[footerStyleIndex] = (_footerStyle != null) ? ((IStateManager)_footerStyle).SaveViewState() : null; myState[partStyleIndex] = (_partStyle != null) ? ((IStateManager)_partStyle).SaveViewState() : null; myState[partChromeStyleIndex] = (_partChromeStyle != null) ? ((IStateManager)_partChromeStyle).SaveViewState() : null; myState[partTitleStyleIndex] = (_partTitleStyle != null) ? ((IStateManager)_partTitleStyle).SaveViewState() : null; myState[headerStyleIndex] = (_headerStyle != null) ? ((IStateManager)_headerStyle).SaveViewState() : null; myState[verbStyleIndex] = (_verbStyle != null) ? ((IStateManager)_verbStyle).SaveViewState() : null; myState[errorStyleIndex] = (_errorStyle != null) ? ((IStateManager)_errorStyle).SaveViewState() : null; for (int i=0; i < viewStateArrayLength; i++) { if (myState[i] != null) { return myState; } } // More performant to return null than an array of null values return null; } protected override void TrackViewState() { base.TrackViewState(); if (_emptyZoneTextStyle != null) { ((IStateManager) _emptyZoneTextStyle).TrackViewState(); } if (_footerStyle != null) { ((IStateManager) _footerStyle).TrackViewState(); } if (_partStyle != null) { ((IStateManager) _partStyle).TrackViewState(); } if (_partChromeStyle != null) { ((IStateManager) _partChromeStyle).TrackViewState(); } if (_partTitleStyle != null) { ((IStateManager) _partTitleStyle).TrackViewState(); } if (_headerStyle != null) { ((IStateManager) _headerStyle).TrackViewState(); } if (_verbStyle != null) { ((IStateManager) _verbStyle).TrackViewState(); } if (_errorStyle != null) { ((IStateManager) _errorStyle).TrackViewState(); } } protected WebPartManager WebPartManager { get { return _webPartManager; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK

instead of