Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / WebParts / GenericWebPart.cs / 1 / 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.Security.Permissions; 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) ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] 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 _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. ( 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DetailsViewInsertedEventArgs.cs
- Variant.cs
- CheckBoxRenderer.cs
- IIS7UserPrincipal.cs
- TypeSystem.cs
- InvalidOleVariantTypeException.cs
- BufferedReadStream.cs
- ContextMenu.cs
- Emitter.cs
- SystemUdpStatistics.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- TextEditorThreadLocalStore.cs
- ObjectSecurity.cs
- Interop.cs
- SyndicationSerializer.cs
- OracleRowUpdatingEventArgs.cs
- MembershipUser.cs
- LogExtentCollection.cs
- DecimalStorage.cs
- XmlSchemaSet.cs
- TemplateXamlTreeBuilder.cs
- IERequestCache.cs
- ShapeTypeface.cs
- UnmanagedMemoryStreamWrapper.cs
- TrustLevel.cs
- NumericPagerField.cs
- SearchForVirtualItemEventArgs.cs
- EntityDataSourceDataSelectionPanel.cs
- ConstraintConverter.cs
- ModifiableIteratorCollection.cs
- WorkflowOperationInvoker.cs
- Line.cs
- _ConnectStream.cs
- VisualTarget.cs
- Tuple.cs
- QilTypeChecker.cs
- EventBuilder.cs
- HtmlControlPersistable.cs
- ImageMap.cs
- basevalidator.cs
- DnsPermission.cs
- DetailsViewUpdateEventArgs.cs
- SqlInfoMessageEvent.cs
- XmlReflectionImporter.cs
- TextLine.cs
- FontFamilyConverter.cs
- EventlogProvider.cs
- GeometryGroup.cs
- LocatorBase.cs
- InstanceNotReadyException.cs
- QuerySetOp.cs
- DateTimeConstantAttribute.cs
- ListViewAutomationPeer.cs
- RefreshEventArgs.cs
- GenerateTemporaryTargetAssembly.cs
- Part.cs
- Property.cs
- NetworkInterface.cs
- LinqDataView.cs
- CornerRadiusConverter.cs
- TypedElement.cs
- ArcSegment.cs
- DynamicHyperLink.cs
- ButtonBaseAdapter.cs
- DataServiceExpressionVisitor.cs
- PageAdapter.cs
- IconBitmapDecoder.cs
- NavigationProperty.cs
- TextDecoration.cs
- XmlAttributeProperties.cs
- TextProperties.cs
- WebPartEditVerb.cs
- TextBoxAutomationPeer.cs
- SlotInfo.cs
- RemoteWebConfigurationHostServer.cs
- CompilerGlobalScopeAttribute.cs
- WebMessageFormatHelper.cs
- Geometry.cs
- HatchBrush.cs
- Identifier.cs
- OdbcEnvironmentHandle.cs
- DataObjectSettingDataEventArgs.cs
- AssemblyUtil.cs
- UpdateRecord.cs
- StylusCaptureWithinProperty.cs
- HttpCapabilitiesEvaluator.cs
- HtmlInputSubmit.cs
- MsmqInputMessage.cs
- MimeTypeMapper.cs
- Stylesheet.cs
- SourceInterpreter.cs
- EdmMember.cs
- MSHTMLHostUtil.cs
- ExpressionBuilder.cs
- MemberAccessException.cs
- EntityDataSourceChangedEventArgs.cs
- AnnotationHighlightLayer.cs
- BamlBinaryReader.cs
- GenericEnumerator.cs
- ModuleConfigurationInfo.cs