Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / UI / UpdatePanel.cs / 1305376 / UpdatePanel.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI { using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using System.Web.Resources; using System.Web.Util; using Debug = System.Diagnostics.Debug; [ DefaultProperty("Triggers"), Designer("System.Web.UI.Design.UpdatePanelDesigner, " + AssemblyRef.SystemWebExtensionsDesign), ParseChildren(true), PersistChildren(false), ToolboxBitmap(typeof(EmbeddedResourceFinder), "System.Web.Resources.UpdatePanel.bmp") ] public class UpdatePanel : Control, IAttributeAccessor, IUpdatePanel { private const string UpdatePanelToken = "updatePanel"; private new IPage _page; private IScriptManagerInternal _scriptManager; private AttributeCollection _attributes; private bool _childrenAsTriggers = true; private ITemplate _contentTemplate; private Control _contentTemplateContainer; private bool _asyncPostBackMode; private bool _asyncPostBackModeInitialized; private UpdatePanelUpdateMode _updateMode = UpdatePanelUpdateMode.Always; private bool _rendered; private bool _explicitUpdate; private UpdatePanelRenderMode _renderMode = UpdatePanelRenderMode.Block; private UpdatePanelTriggerCollection _triggers; // Keep an explicit check whether the panel registered with ScriptManager. Sometimes // OnInit is not called on the panel, so then OnUnload gets called and you get an // exception. This can happen if an unhandled exception happened on the page before Init // and the page unloads. private bool _panelRegistered; public UpdatePanel() { } internal UpdatePanel(IScriptManagerInternal scriptManager, IPage page) { _scriptManager = scriptManager; _page = page; } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), WebSysDescription(SR.WebControl_Attributes) ] public AttributeCollection Attributes { get { if (_attributes == null) { StateBag bag = new StateBag(true /* ignoreCase */); _attributes = new AttributeCollection(bag); } return _attributes; } } [ ResourceDescription("UpdatePanel_ChildrenAsTriggers"), Category("Behavior"), DefaultValue(true), ] public bool ChildrenAsTriggers { get { return _childrenAsTriggers; } set { _childrenAsTriggers = value; } } [ Browsable(false), PersistenceMode(PersistenceMode.InnerProperty), TemplateInstance(TemplateInstance.Single), ] public ITemplate ContentTemplate { get { return _contentTemplate; } set { if (!DesignMode && _contentTemplate != null) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotSetContentTemplate, ID)); } _contentTemplate = value; if (_contentTemplate != null) { // DevDiv 79989: Instantiate the template immediately so that the controls are available as soon as possible CreateContents(); } } } public sealed override ControlCollection Controls { get { // We override and seal this property because we have very special semantics // on the behavior of this property and the type of ControlCollection we create. return base.Controls; } } [ Browsable(false), ] public Control ContentTemplateContainer { get { if (_contentTemplateContainer == null) { _contentTemplateContainer = CreateContentTemplateContainer(); AddContentTemplateContainer(); } return _contentTemplateContainer; } } [ Browsable(false), ] public bool IsInPartialRendering { get { return _asyncPostBackMode; } } private IPage IPage { get { if (_page != null) { return _page; } else { Page page = Page; if (page == null) { throw new InvalidOperationException(AtlasWeb.Common_PageCannotBeNull); } return new PageWrapper(page); } } } protected internal virtual bool RequiresUpdate { get { if (_explicitUpdate || (UpdateMode == UpdatePanelUpdateMode.Always)) { return true; } if ((_triggers == null) || (_triggers.Count == 0)) { return false; } return _triggers.HasTriggered(); } } [ ResourceDescription("UpdatePanel_RenderMode"), Category("Layout"), DefaultValue(UpdatePanelRenderMode.Block), ] public UpdatePanelRenderMode RenderMode { get { return _renderMode; } set { if (value < UpdatePanelRenderMode.Block || value > UpdatePanelRenderMode.Inline) { throw new ArgumentOutOfRangeException("value"); } _renderMode = value; } } internal IScriptManagerInternal ScriptManager { get { if (_scriptManager == null) { Page page = Page; if (page == null) { throw new InvalidOperationException(AtlasWeb.Common_PageCannotBeNull); } _scriptManager = UI.ScriptManager.GetCurrent(page); if (_scriptManager == null) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.Common_ScriptManagerRequired, ID)); } } return _scriptManager; } } [ Category("Behavior"), DefaultValue(null), Editor("System.Web.UI.Design.UpdatePanelTriggerCollectionEditor, " + AssemblyRef.SystemWebExtensionsDesign, typeof(UITypeEditor)), ResourceDescription("UpdatePanel_Triggers"), PersistenceMode(PersistenceMode.InnerProperty), MergableProperty(false), ] public UpdatePanelTriggerCollection Triggers { get { if (_triggers == null) { // NOTE: This is not view state managed, because the update panel trigger // collection needs to be ready by InitComplete (so that // Initialize of all triggers gets called at init time), which // implies that the trigger collection cannot be modified // beyond what was set up declaratively. _triggers = new UpdatePanelTriggerCollection(this); } return _triggers; } } [ ResourceDescription("UpdatePanel_UpdateMode"), Category("Behavior"), DefaultValue(UpdatePanelUpdateMode.Always), ] public UpdatePanelUpdateMode UpdateMode { get { return _updateMode; } set { if (value < UpdatePanelUpdateMode.Always || value > UpdatePanelUpdateMode.Conditional) { throw new ArgumentOutOfRangeException("value"); } _updateMode = value; } } private SingleChildControlCollection ChildControls { get { SingleChildControlCollection singleChildCollection = Controls as SingleChildControlCollection; Debug.Assert(singleChildCollection != null, "The Controls property did not return the expected control collection instance."); return singleChildCollection; } } private void AddContentTemplateContainer() { // This will call an internal method to specially add the // ContentTemplateContainer to the control tree safely. ChildControls.AddSingleChild(_contentTemplateContainer); } internal void ClearContent() { Debug.Assert(DesignMode, "ClearContent should only be used in DesignMode."); // DevDiv Bugs 135848: // Called from UpdatePanelDesigner to clear control tree when // GetDesignTimeHtml(DesignerRegionCollection regions) is called, necessary to avoid // duplicate controls being created at design time. See comment in UpdatePanelDesigner. ContentTemplateContainer.Controls.Clear(); _contentTemplateContainer = null; ChildControls.ClearInternal(); } private void CreateContents() { if (DesignMode) { // Clear out old stuff ClearContent(); } // The ContentTemplateContainer may have already been created by someone due to // some dynamic access. If the container already exists and there is a ContentTemplate, // we will instantiate into it. if (_contentTemplateContainer == null) { _contentTemplateContainer = CreateContentTemplateContainer(); // The controls inside the template are instantiated into // a dummy container to ensure that they all do lifecycle catchup // at the same time (i.e. Init1, Init2, Load1, Load2) as opposed to // one after another (i.e. Init1, Load1, Init2, Load2). if (_contentTemplate != null) { _contentTemplate.InstantiateIn(_contentTemplateContainer); } AddContentTemplateContainer(); } else if (_contentTemplate != null) { // Someone already created a ContentTemplateContainer, instantiate into it _contentTemplate.InstantiateIn(_contentTemplateContainer); } } protected virtual Control CreateContentTemplateContainer() { return new Control(); } protected sealed override ControlCollection CreateControlCollection() { // We override and seal this method because we have very special semantics // on the behavior of this method and the type of ControlCollection we create. return new SingleChildControlCollection(this); } protected internal virtual void Initialize() { if (_triggers != null) { if (ScriptManager.SupportsPartialRendering) { // Triggers need to be initialized in initial requests as well as all postbacks, // however only if partial rendering is enabled. _triggers.Initialize(); } } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnInit(EventArgs e) { base.OnInit(e); RegisterPanel(); // DevDiv 79989: Whether the template has been set or not we need to ensure // the template container is created by Init to remain consistent with 1.0. if (_contentTemplateContainer == null) { _contentTemplateContainer = CreateContentTemplateContainer(); AddContentTemplateContainer(); } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnLoad(EventArgs e) { base.OnLoad(e); if (!DesignMode) { if (!ScriptManager.IsInAsyncPostBack) { // In partial rendering mode, ScriptManager calls Initialize. // In all other cases we have to initialize here. // This will cause things like AsyncPostBackTrigger to // register event handlers for control events, which in turn // will lead controls to track property values in view state // and appropriately detect changes on the subsequent postbacks. Initialize(); } } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (!ChildrenAsTriggers && UpdateMode == UpdatePanelUpdateMode.Always) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_ChildrenTriggersAndUpdateAlways, ID)); } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnUnload(EventArgs e) { if (!DesignMode && _panelRegistered) { ScriptManager.UnregisterUpdatePanel(this); } base.OnUnload(e); } private void RegisterPanel() { // Safeguard against registering in design mode, and against registering twice if (!DesignMode && !_panelRegistered) { // Before we can register we need to make sure all our parent panel (if any) has // registered already. This is critical since the ScriptManager assumes that // the panels are registered in a specific order. Control parent = Parent; while (parent != null) { UpdatePanel parentUpdatePanel = parent as UpdatePanel; if (parentUpdatePanel != null) { parentUpdatePanel.RegisterPanel(); break; } parent = parent.Parent; } // Now we can register ourselves ScriptManager.RegisterUpdatePanel(this); _panelRegistered = true; } } protected internal override void Render(HtmlTextWriter writer) { IPage.VerifyRenderingInServerForm(this); base.Render(writer); } protected internal override void RenderChildren(HtmlTextWriter writer) { if (_asyncPostBackMode) { Debug.Assert(!DesignMode, "Shouldn't be in DesignMode"); // Render might sometimes be called twice instead of just once if we are forcing // all controls to render to ensure EventValidation is valid. if (_rendered) { return; } HtmlTextWriter childWriter = new HtmlTextWriter(new StringWriter(CultureInfo.CurrentCulture)); base.RenderChildren(childWriter); PageRequestManager.EncodeString(writer, UpdatePanelToken, ClientID, childWriter.InnerWriter.ToString()); } else { Debug.Assert(!_rendered); writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID); if (_attributes != null) { _attributes.AddAttributes(writer); } if (RenderMode == UpdatePanelRenderMode.Block) { writer.RenderBeginTag(HtmlTextWriterTag.Div); } else { writer.RenderBeginTag(HtmlTextWriterTag.Span); } base.RenderChildren(writer); writer.RenderEndTag(); } _rendered = true; } internal void SetAsyncPostBackMode(bool asyncPostBackMode) { if (_asyncPostBackModeInitialized) { throw new InvalidOperationException(AtlasWeb.UpdatePanel_SetPartialRenderingModeCalledOnce); } _asyncPostBackMode = asyncPostBackMode; _asyncPostBackModeInitialized = true; } public void Update() { if (UpdateMode == UpdatePanelUpdateMode.Always) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_UpdateConditional, ID)); } if (_asyncPostBackModeInitialized) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_UpdateTooLate, ID)); } _explicitUpdate = true; } string IAttributeAccessor.GetAttribute(string key) { return (_attributes != null) ? _attributes[key] : null; } void IAttributeAccessor.SetAttribute(string key, string value) { Attributes[key] = value; } private sealed class SingleChildControlCollection : ControlCollection { private bool _allowClear; public SingleChildControlCollection(Control owner) : base(owner) { } internal void AddSingleChild(Control child) { Debug.Assert(Count == 0, "The collection must be empty if this is called"); base.Add(child); } public override void Add(Control child) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } public override void AddAt(int index, Control child) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } public override void Clear() { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } internal void ClearInternal() { try { _allowClear = true; base.Clear(); } finally { _allowClear = false; } } public override void Remove(Control value) { if (!_allowClear) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } base.Remove(value); } public override void RemoveAt(int index) { if (!_allowClear) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } base.RemoveAt(index); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI { using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using System.Web.Resources; using System.Web.Util; using Debug = System.Diagnostics.Debug; [ DefaultProperty("Triggers"), Designer("System.Web.UI.Design.UpdatePanelDesigner, " + AssemblyRef.SystemWebExtensionsDesign), ParseChildren(true), PersistChildren(false), ToolboxBitmap(typeof(EmbeddedResourceFinder), "System.Web.Resources.UpdatePanel.bmp") ] public class UpdatePanel : Control, IAttributeAccessor, IUpdatePanel { private const string UpdatePanelToken = "updatePanel"; private new IPage _page; private IScriptManagerInternal _scriptManager; private AttributeCollection _attributes; private bool _childrenAsTriggers = true; private ITemplate _contentTemplate; private Control _contentTemplateContainer; private bool _asyncPostBackMode; private bool _asyncPostBackModeInitialized; private UpdatePanelUpdateMode _updateMode = UpdatePanelUpdateMode.Always; private bool _rendered; private bool _explicitUpdate; private UpdatePanelRenderMode _renderMode = UpdatePanelRenderMode.Block; private UpdatePanelTriggerCollection _triggers; // Keep an explicit check whether the panel registered with ScriptManager. Sometimes // OnInit is not called on the panel, so then OnUnload gets called and you get an // exception. This can happen if an unhandled exception happened on the page before Init // and the page unloads. private bool _panelRegistered; public UpdatePanel() { } internal UpdatePanel(IScriptManagerInternal scriptManager, IPage page) { _scriptManager = scriptManager; _page = page; } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), WebSysDescription(SR.WebControl_Attributes) ] public AttributeCollection Attributes { get { if (_attributes == null) { StateBag bag = new StateBag(true /* ignoreCase */); _attributes = new AttributeCollection(bag); } return _attributes; } } [ ResourceDescription("UpdatePanel_ChildrenAsTriggers"), Category("Behavior"), DefaultValue(true), ] public bool ChildrenAsTriggers { get { return _childrenAsTriggers; } set { _childrenAsTriggers = value; } } [ Browsable(false), PersistenceMode(PersistenceMode.InnerProperty), TemplateInstance(TemplateInstance.Single), ] public ITemplate ContentTemplate { get { return _contentTemplate; } set { if (!DesignMode && _contentTemplate != null) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotSetContentTemplate, ID)); } _contentTemplate = value; if (_contentTemplate != null) { // DevDiv 79989: Instantiate the template immediately so that the controls are available as soon as possible CreateContents(); } } } public sealed override ControlCollection Controls { get { // We override and seal this property because we have very special semantics // on the behavior of this property and the type of ControlCollection we create. return base.Controls; } } [ Browsable(false), ] public Control ContentTemplateContainer { get { if (_contentTemplateContainer == null) { _contentTemplateContainer = CreateContentTemplateContainer(); AddContentTemplateContainer(); } return _contentTemplateContainer; } } [ Browsable(false), ] public bool IsInPartialRendering { get { return _asyncPostBackMode; } } private IPage IPage { get { if (_page != null) { return _page; } else { Page page = Page; if (page == null) { throw new InvalidOperationException(AtlasWeb.Common_PageCannotBeNull); } return new PageWrapper(page); } } } protected internal virtual bool RequiresUpdate { get { if (_explicitUpdate || (UpdateMode == UpdatePanelUpdateMode.Always)) { return true; } if ((_triggers == null) || (_triggers.Count == 0)) { return false; } return _triggers.HasTriggered(); } } [ ResourceDescription("UpdatePanel_RenderMode"), Category("Layout"), DefaultValue(UpdatePanelRenderMode.Block), ] public UpdatePanelRenderMode RenderMode { get { return _renderMode; } set { if (value < UpdatePanelRenderMode.Block || value > UpdatePanelRenderMode.Inline) { throw new ArgumentOutOfRangeException("value"); } _renderMode = value; } } internal IScriptManagerInternal ScriptManager { get { if (_scriptManager == null) { Page page = Page; if (page == null) { throw new InvalidOperationException(AtlasWeb.Common_PageCannotBeNull); } _scriptManager = UI.ScriptManager.GetCurrent(page); if (_scriptManager == null) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.Common_ScriptManagerRequired, ID)); } } return _scriptManager; } } [ Category("Behavior"), DefaultValue(null), Editor("System.Web.UI.Design.UpdatePanelTriggerCollectionEditor, " + AssemblyRef.SystemWebExtensionsDesign, typeof(UITypeEditor)), ResourceDescription("UpdatePanel_Triggers"), PersistenceMode(PersistenceMode.InnerProperty), MergableProperty(false), ] public UpdatePanelTriggerCollection Triggers { get { if (_triggers == null) { // NOTE: This is not view state managed, because the update panel trigger // collection needs to be ready by InitComplete (so that // Initialize of all triggers gets called at init time), which // implies that the trigger collection cannot be modified // beyond what was set up declaratively. _triggers = new UpdatePanelTriggerCollection(this); } return _triggers; } } [ ResourceDescription("UpdatePanel_UpdateMode"), Category("Behavior"), DefaultValue(UpdatePanelUpdateMode.Always), ] public UpdatePanelUpdateMode UpdateMode { get { return _updateMode; } set { if (value < UpdatePanelUpdateMode.Always || value > UpdatePanelUpdateMode.Conditional) { throw new ArgumentOutOfRangeException("value"); } _updateMode = value; } } private SingleChildControlCollection ChildControls { get { SingleChildControlCollection singleChildCollection = Controls as SingleChildControlCollection; Debug.Assert(singleChildCollection != null, "The Controls property did not return the expected control collection instance."); return singleChildCollection; } } private void AddContentTemplateContainer() { // This will call an internal method to specially add the // ContentTemplateContainer to the control tree safely. ChildControls.AddSingleChild(_contentTemplateContainer); } internal void ClearContent() { Debug.Assert(DesignMode, "ClearContent should only be used in DesignMode."); // DevDiv Bugs 135848: // Called from UpdatePanelDesigner to clear control tree when // GetDesignTimeHtml(DesignerRegionCollection regions) is called, necessary to avoid // duplicate controls being created at design time. See comment in UpdatePanelDesigner. ContentTemplateContainer.Controls.Clear(); _contentTemplateContainer = null; ChildControls.ClearInternal(); } private void CreateContents() { if (DesignMode) { // Clear out old stuff ClearContent(); } // The ContentTemplateContainer may have already been created by someone due to // some dynamic access. If the container already exists and there is a ContentTemplate, // we will instantiate into it. if (_contentTemplateContainer == null) { _contentTemplateContainer = CreateContentTemplateContainer(); // The controls inside the template are instantiated into // a dummy container to ensure that they all do lifecycle catchup // at the same time (i.e. Init1, Init2, Load1, Load2) as opposed to // one after another (i.e. Init1, Load1, Init2, Load2). if (_contentTemplate != null) { _contentTemplate.InstantiateIn(_contentTemplateContainer); } AddContentTemplateContainer(); } else if (_contentTemplate != null) { // Someone already created a ContentTemplateContainer, instantiate into it _contentTemplate.InstantiateIn(_contentTemplateContainer); } } protected virtual Control CreateContentTemplateContainer() { return new Control(); } protected sealed override ControlCollection CreateControlCollection() { // We override and seal this method because we have very special semantics // on the behavior of this method and the type of ControlCollection we create. return new SingleChildControlCollection(this); } protected internal virtual void Initialize() { if (_triggers != null) { if (ScriptManager.SupportsPartialRendering) { // Triggers need to be initialized in initial requests as well as all postbacks, // however only if partial rendering is enabled. _triggers.Initialize(); } } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnInit(EventArgs e) { base.OnInit(e); RegisterPanel(); // DevDiv 79989: Whether the template has been set or not we need to ensure // the template container is created by Init to remain consistent with 1.0. if (_contentTemplateContainer == null) { _contentTemplateContainer = CreateContentTemplateContainer(); AddContentTemplateContainer(); } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnLoad(EventArgs e) { base.OnLoad(e); if (!DesignMode) { if (!ScriptManager.IsInAsyncPostBack) { // In partial rendering mode, ScriptManager calls Initialize. // In all other cases we have to initialize here. // This will cause things like AsyncPostBackTrigger to // register event handlers for control events, which in turn // will lead controls to track property values in view state // and appropriately detect changes on the subsequent postbacks. Initialize(); } } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (!ChildrenAsTriggers && UpdateMode == UpdatePanelUpdateMode.Always) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_ChildrenTriggersAndUpdateAlways, ID)); } } [SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] protected internal override void OnUnload(EventArgs e) { if (!DesignMode && _panelRegistered) { ScriptManager.UnregisterUpdatePanel(this); } base.OnUnload(e); } private void RegisterPanel() { // Safeguard against registering in design mode, and against registering twice if (!DesignMode && !_panelRegistered) { // Before we can register we need to make sure all our parent panel (if any) has // registered already. This is critical since the ScriptManager assumes that // the panels are registered in a specific order. Control parent = Parent; while (parent != null) { UpdatePanel parentUpdatePanel = parent as UpdatePanel; if (parentUpdatePanel != null) { parentUpdatePanel.RegisterPanel(); break; } parent = parent.Parent; } // Now we can register ourselves ScriptManager.RegisterUpdatePanel(this); _panelRegistered = true; } } protected internal override void Render(HtmlTextWriter writer) { IPage.VerifyRenderingInServerForm(this); base.Render(writer); } protected internal override void RenderChildren(HtmlTextWriter writer) { if (_asyncPostBackMode) { Debug.Assert(!DesignMode, "Shouldn't be in DesignMode"); // Render might sometimes be called twice instead of just once if we are forcing // all controls to render to ensure EventValidation is valid. if (_rendered) { return; } HtmlTextWriter childWriter = new HtmlTextWriter(new StringWriter(CultureInfo.CurrentCulture)); base.RenderChildren(childWriter); PageRequestManager.EncodeString(writer, UpdatePanelToken, ClientID, childWriter.InnerWriter.ToString()); } else { Debug.Assert(!_rendered); writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID); if (_attributes != null) { _attributes.AddAttributes(writer); } if (RenderMode == UpdatePanelRenderMode.Block) { writer.RenderBeginTag(HtmlTextWriterTag.Div); } else { writer.RenderBeginTag(HtmlTextWriterTag.Span); } base.RenderChildren(writer); writer.RenderEndTag(); } _rendered = true; } internal void SetAsyncPostBackMode(bool asyncPostBackMode) { if (_asyncPostBackModeInitialized) { throw new InvalidOperationException(AtlasWeb.UpdatePanel_SetPartialRenderingModeCalledOnce); } _asyncPostBackMode = asyncPostBackMode; _asyncPostBackModeInitialized = true; } public void Update() { if (UpdateMode == UpdatePanelUpdateMode.Always) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_UpdateConditional, ID)); } if (_asyncPostBackModeInitialized) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_UpdateTooLate, ID)); } _explicitUpdate = true; } string IAttributeAccessor.GetAttribute(string key) { return (_attributes != null) ? _attributes[key] : null; } void IAttributeAccessor.SetAttribute(string key, string value) { Attributes[key] = value; } private sealed class SingleChildControlCollection : ControlCollection { private bool _allowClear; public SingleChildControlCollection(Control owner) : base(owner) { } internal void AddSingleChild(Control child) { Debug.Assert(Count == 0, "The collection must be empty if this is called"); base.Add(child); } public override void Add(Control child) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } public override void AddAt(int index, Control child) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } public override void Clear() { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } internal void ClearInternal() { try { _allowClear = true; base.Clear(); } finally { _allowClear = false; } } public override void Remove(Control value) { if (!_allowClear) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } base.Remove(value); } public override void RemoveAt(int index) { if (!_allowClear) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.UpdatePanel_CannotModifyControlCollection, Owner.ID)); } base.RemoveAt(index); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TableLayoutColumnStyleCollection.cs
- RegexStringValidatorAttribute.cs
- Rfc2898DeriveBytes.cs
- ConnectionProviderAttribute.cs
- PasswordBox.cs
- Encoder.cs
- CurrentChangingEventArgs.cs
- ReadOnlyPropertyMetadata.cs
- ExternalCalls.cs
- CallSiteBinder.cs
- ObjectViewQueryResultData.cs
- TextContainerHelper.cs
- FontFamilyIdentifier.cs
- XmlCharCheckingWriter.cs
- ThreadPool.cs
- WindowsTooltip.cs
- WebConfigurationManager.cs
- RemotingSurrogateSelector.cs
- FrugalMap.cs
- OutOfMemoryException.cs
- DbgCompiler.cs
- KnownBoxes.cs
- TileBrush.cs
- UnsafeNativeMethods.cs
- ContextItemManager.cs
- ResourceDisplayNameAttribute.cs
- WebPartCollection.cs
- ClaimComparer.cs
- XmlSerializerFaultFormatter.cs
- TextEditorDragDrop.cs
- WhiteSpaceTrimStringConverter.cs
- QuarticEase.cs
- SmiRecordBuffer.cs
- thaishape.cs
- SerializationSectionGroup.cs
- ContentControl.cs
- XmlQueryOutput.cs
- MsmqBindingBase.cs
- TransformPatternIdentifiers.cs
- ApplyTemplatesAction.cs
- shaperfactoryquerycacheentry.cs
- EntitySet.cs
- basevalidator.cs
- LambdaCompiler.Address.cs
- SiteMapProvider.cs
- TrailingSpaceComparer.cs
- TraceSource.cs
- ThemeableAttribute.cs
- VisualStyleTypesAndProperties.cs
- SiteOfOriginPart.cs
- smtppermission.cs
- prompt.cs
- GridViewAutomationPeer.cs
- FormViewRow.cs
- OrthographicCamera.cs
- ConfigXmlComment.cs
- SafeIUnknown.cs
- AdapterDictionary.cs
- RelationHandler.cs
- DataGridCommandEventArgs.cs
- diagnosticsswitches.cs
- ChameleonKey.cs
- SqlSupersetValidator.cs
- URLEditor.cs
- JsonCollectionDataContract.cs
- FontStretches.cs
- CircleHotSpot.cs
- BamlResourceContent.cs
- DbProviderFactory.cs
- UnsafeNativeMethodsMilCoreApi.cs
- InstanceKeyNotReadyException.cs
- smtppermission.cs
- StreamHelper.cs
- SystemIcons.cs
- DataGridViewCellValidatingEventArgs.cs
- AuthenticationService.cs
- RuleInfoComparer.cs
- CodeGotoStatement.cs
- NativeMethods.cs
- GroupBox.cs
- BuildProviderCollection.cs
- TypeConverterValueSerializer.cs
- StreamGeometry.cs
- BamlCollectionHolder.cs
- StylusPointPropertyId.cs
- ItemType.cs
- HttpHandlerAction.cs
- SqlFileStream.cs
- UpWmlPageAdapter.cs
- ReadOnlyNameValueCollection.cs
- LogicalExpr.cs
- GridViewRowEventArgs.cs
- SHA512Managed.cs
- ReferenceConverter.cs
- XmlSchemaObjectTable.cs
- ImportedPolicyConversionContext.cs
- ExecutionProperties.cs
- DetailsView.cs
- DelegateHelpers.cs
- CalendarDataBindingHandler.cs