1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
//------------------------------------------------------------------------------
// <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
}
}
|