e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
78 lines
2.7 KiB
C#
78 lines
2.7 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="CompositeControl.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.WebControls {
|
|
|
|
using System.ComponentModel;
|
|
using System.Web.Util;
|
|
|
|
/// <devdoc>
|
|
/// Base class for composite controls -- controls that contain other controls and reuse their functionality
|
|
/// via class composition. See Chapter 12 in "Developing Microsoft ASP.NET Server Controls and Components."
|
|
/// The following classes have copied code from this class (look for "Copied from CompositeControl" comment):
|
|
/// - ChangePassword
|
|
/// - Login
|
|
/// - LoginView
|
|
/// - SiteMapPath
|
|
/// </devdoc>
|
|
[
|
|
Designer("System.Web.UI.Design.WebControls.CompositeControlDesigner, " + AssemblyRef.SystemDesign)
|
|
]
|
|
public abstract class CompositeControl : WebControl, INamingContainer, ICompositeControlDesignerAccessor {
|
|
|
|
|
|
/// <devdoc>
|
|
/// Ensure that the child controls have been created before returning the controls collection
|
|
/// </devdoc>
|
|
public override ControlCollection Controls {
|
|
get {
|
|
EnsureChildControls();
|
|
return base.Controls;
|
|
}
|
|
}
|
|
|
|
public override bool SupportsDisabledAttribute {
|
|
get {
|
|
return RenderingCompatibility < VersionUtil.Framework40;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Perform our own databinding, then perform our child controls' databinding.
|
|
/// Does not call Base.DataBind(), since we need to call EnsureChildControls() between
|
|
/// OnDataBinding() and DataBindChildren().
|
|
/// </devdoc>
|
|
public override void DataBind() {
|
|
OnDataBinding(EventArgs.Empty);
|
|
|
|
EnsureChildControls();
|
|
|
|
DataBindChildren();
|
|
}
|
|
|
|
protected virtual void RecreateChildControls() {
|
|
ChildControlsCreated = false;
|
|
EnsureChildControls();
|
|
}
|
|
|
|
// Needed so the CompositeControl renders correctly in the designer, even when it does not have
|
|
// an associated ControlDesigner (i.e. it is a child control of another CompositeControl).
|
|
protected internal override void Render(HtmlTextWriter writer) {
|
|
if (DesignMode) {
|
|
EnsureChildControls();
|
|
}
|
|
|
|
base.Render(writer);
|
|
}
|
|
|
|
#region ICompositeControlDesignerAccessor implementation
|
|
void ICompositeControlDesignerAccessor.RecreateChildControls() {
|
|
RecreateChildControls();
|
|
}
|
|
#endregion
|
|
}
|
|
}
|