GenericWebPart.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / WebParts / GenericWebPart.cs / 1305376 / GenericWebPart.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.UI.WebControls.WebParts { 
 
    using System;
    using System.Collections; 
    using System.ComponentModel;
    using System.Globalization;
    using System.Web.UI;
    using System.Web.UI.WebControls; 
    using System.Web.Util;
 
    ///  
    /// A WebPart that can wrap any other generic server control, and provide it
    /// with "WebPart-ness." 
    /// 1. Implements several properties if not set on the WebPart by looking for an
    /// attribute on the contained control.
    /// 2. Implement IWebEditable to allow the PropertyGridEditorPart to tunnel-in
    /// and browse the contained control. 
    /// 
    [ 
    ToolboxItem(false) 
    ]
    public class GenericWebPart : WebPart { 

        internal const string IDPrefix = "gwp";
        private Control _childControl;
        private IWebPart _childIWebPart; 
        private string _subtitle;
 
        ///  
        /// Intializes an instance of GenericWebPart with the control it is to wrap.
        ///  
        protected internal GenericWebPart(Control control) {
            if (control == null) {
                throw new ArgumentNullException("control");
            } 
            if (control is WebPart) {
                throw new ArgumentException(SR.GetString(SR.GenericWebPart_CannotWrapWebPart), "control"); 
            } 
            if (control is BasePartialCachingControl) {
                throw new ArgumentException(SR.GetString(SR.GenericWebPart_CannotWrapOutputCachedControl), "control"); 
            }
            if (String.IsNullOrEmpty(control.ID)) {
                throw new ArgumentException(SR.GetString(SR.GenericWebPart_NoID, control.GetType().FullName));
            } 

            ID = IDPrefix + control.ID; 
            _childControl = control; 
            _childIWebPart = _childControl as IWebPart;
            CopyChildAttributes(); 
        }

        public override string CatalogIconImageUrl {
            get { 
                if (_childIWebPart != null) {
                    return _childIWebPart.CatalogIconImageUrl; 
                } 
                else {
                    return base.CatalogIconImageUrl; 
                }
            }
            set {
                if (_childIWebPart != null) { 
                    _childIWebPart.CatalogIconImageUrl = value;
                } 
                else { 
                    base.CatalogIconImageUrl = value;
                } 
            }
        }

        public Control ChildControl { 
            get {
                Debug.Assert(_childControl != null, "ChildControl cannot be null."); 
                return _childControl; 
            }
        } 

        public override string Description {
            get {
                if (_childIWebPart != null) { 
                    return _childIWebPart.Description;
                } 
                else { 
                    return base.Description;
                } 
            }
            set {
                if (_childIWebPart != null) {
                    _childIWebPart.Description = value; 
                }
                else { 
                    base.Description = value; 
                }
            } 
        }

        public override Unit Height {
            get { 
                WebControl c = ChildControl as WebControl;
                if (c != null) { 
                    return c.Height; 
                }
                else { 
                    return base.Height;
                }
            }
            set { 
                WebControl c = ChildControl as WebControl;
                if (c != null) { 
                    c.Height = value; 
                }
                else { 
                    base.Height = value;
                }
            }
        } 

        // Seal the ID property so we can set it in the constructor without an FxCop violation. 
        public sealed override string ID { 
            get {
                return base.ID; 
            }
            set {
                base.ID = value;
            } 
        }
 
        public override string Subtitle { 
            get {
                if (_childIWebPart != null) { 
                    return _childIWebPart.Subtitle;
                }
                else {
                    return (_subtitle != null ? _subtitle : String.Empty); 
                }
            } 
        } 

        public override string Title { 
            get {
                if (_childIWebPart != null) {
                    return _childIWebPart.Title;
                } 
                else {
                    return base.Title; 
                } 
            }
            set { 
                if (_childIWebPart != null) {
                    _childIWebPart.Title = value;
                }
                else { 
                    base.Title = value;
                } 
            } 
        }
 
        public override string TitleIconImageUrl {
            get {
                if (_childIWebPart != null) {
                    return _childIWebPart.TitleIconImageUrl; 
                }
                else { 
                    return base.TitleIconImageUrl; 
                }
            } 
            set {
                if (_childIWebPart != null) {
                    _childIWebPart.TitleIconImageUrl = value;
                } 
                else {
                    base.TitleIconImageUrl = value; 
                } 
            }
        } 

        public override string TitleUrl {
            get {
                if (_childIWebPart != null) { 
                    return _childIWebPart.TitleUrl;
                } 
                else { 
                    return base.TitleUrl;
                } 
            }
            set {
                if (_childIWebPart != null) {
                    _childIWebPart.TitleUrl = value; 
                }
                else { 
                    base.TitleUrl = value; 
                }
            } 
        }

        public override WebPartVerbCollection Verbs {
            get { 
                if (ChildControl != null) {
                    IWebActionable webActionableChildControl = ChildControl as IWebActionable; 
                    if (webActionableChildControl != null) { 
                        return new WebPartVerbCollection(base.Verbs, webActionableChildControl.Verbs);
                    } 
                }
                return base.Verbs;
            }
        } 

        public override object WebBrowsableObject { 
            get { 
                IWebEditable webEditableChildControl = ChildControl as IWebEditable;
                if (webEditableChildControl != null) { 
                    return webEditableChildControl.WebBrowsableObject;
                }
                else {
                    return ChildControl; 
                }
            } 
        } 

        public override Unit Width { 
            get {
                WebControl c = ChildControl as WebControl;
                if (c != null) {
                    return c.Width; 
                }
                else { 
                    return base.Width; 
                }
            } 
            set {
                WebControl c = ChildControl as WebControl;
                if (c != null) {
                    c.Width = value; 
                }
                else { 
                    base.Width = value; 
                }
            } 
        }

        private void CopyChildAttributes() {
            // Copy the attribute values from the ChildControl to the GenericWebPart properties. 
            IAttributeAccessor childAttributeAccessor = ChildControl as IAttributeAccessor;
            if (childAttributeAccessor != null) { 
                base.AuthorizationFilter = childAttributeAccessor.GetAttribute("AuthorizationFilter"); 
                base.CatalogIconImageUrl = childAttributeAccessor.GetAttribute("CatalogIconImageUrl");
                base.Description = childAttributeAccessor.GetAttribute("Description"); 

                string exportMode = childAttributeAccessor.GetAttribute("ExportMode");
                if (exportMode != null) {
                    base.ExportMode = (WebPartExportMode)(Util.GetEnumAttribute( 
                        "ExportMode", exportMode, typeof(WebPartExportMode)));
                } 
 
                // Don't need to check base.Subtitle, since we always want to use the Subtitle on the
                // ChildControl if it is present.  Also, the property is not settable on WebPart, so we 
                // know that base.Subtitle will always be String.Empty.
                _subtitle = childAttributeAccessor.GetAttribute("Subtitle");

                base.Title = childAttributeAccessor.GetAttribute("Title"); 
                base.TitleIconImageUrl = childAttributeAccessor.GetAttribute("TitleIconImageUrl");
                base.TitleUrl = childAttributeAccessor.GetAttribute("TitleUrl"); 
            } 

            // Remove all the attributes from the ChildControl, whether or not they were copied 
            // to the GenericWebPart property.  We want to remove the attributes so they are not
            // rendered on the ChildControl.  (VSWhidbey 313674)
            WebControl childWebControl = ChildControl as WebControl;
            if (childWebControl != null) { 
                // If the ChildControl is a WebControl, we want to completely remove the attributes.
                childWebControl.Attributes.Remove("AuthorizationFilter"); 
                childWebControl.Attributes.Remove("CatalogIconImageUrl"); 
                childWebControl.Attributes.Remove("Description");
                childWebControl.Attributes.Remove("ExportMode"); 
                childWebControl.Attributes.Remove("Subtitle");
                childWebControl.Attributes.Remove("Title");
                childWebControl.Attributes.Remove("TitleIconImageUrl");
                childWebControl.Attributes.Remove("TitleUrl"); 
            }
            else if (childAttributeAccessor != null) { 
                // If the ChildControl is not a WebControl, we cannot remove the attributes, so we set 
                // them to null instead.
                childAttributeAccessor.SetAttribute("AuthorizationFilter", null); 
                childAttributeAccessor.SetAttribute("CatalogIconImageUrl", null);
                childAttributeAccessor.SetAttribute("Description", null);
                childAttributeAccessor.SetAttribute("ExportMode", null);
                childAttributeAccessor.SetAttribute("Subtitle", null); 
                childAttributeAccessor.SetAttribute("Title", null);
                childAttributeAccessor.SetAttribute("TitleIconImageUrl", null); 
                childAttributeAccessor.SetAttribute("TitleUrl", null); 
            }
        } 

        protected internal override void CreateChildControls() {
            ((GenericWebPartControlCollection)Controls).AddGenericControl(ChildControl);
        } 

        protected override ControlCollection CreateControlCollection() { 
            return new GenericWebPartControlCollection(this); 
        }
 
        public override EditorPartCollection CreateEditorParts() {
            IWebEditable webEditableChildControl = ChildControl as IWebEditable;
            if (webEditableChildControl != null) {
                return new EditorPartCollection(base.CreateEditorParts(), webEditableChildControl.CreateEditorParts()); 
            }
            else { 
                return base.CreateEditorParts(); 
            }
        } 

        protected internal override void Render(HtmlTextWriter writer) {
            // Copied from CompositeControl.Render()
            if (DesignMode) { 
                EnsureChildControls();
            } 
 
            RenderContents(writer);
        } 

        private sealed class GenericWebPartControlCollection : ControlCollection {
            public GenericWebPartControlCollection(GenericWebPart owner) : base(owner) {
                SetCollectionReadOnly(SR.GenericWebPart_CannotModify); 
            }
 
            ///  
            /// Allows adding the generic control to be wrapped.
            ///  
            public void AddGenericControl(Control control) {
                string originalError = SetCollectionReadOnly(null);
                // Extra try-catch block to prevent elevation of privilege attack via exception filter
                try { 
                    try {
                        Clear(); 
                        Add(control); 
                    }
                    finally { 
                        SetCollectionReadOnly(originalError);
                    }
                }
                catch { 
                    throw;
                } 
            } 
        }
    } 
}

// 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