ASP.NET: Inner content with User Controls

Sun, Aug 27, 2006 @ 12:51 AM - Josh Einstein

This was a real pain in the ass to figure out and searching around the internet, I couldn't really find any straight answers. But I finally figured out how to use nested content with an ASP.NET User Control without resorting to a custom control. (Hey I'm a design-time guy.)

So let's say you want to do this:

<uc1:Box runat=”server” Title=“This is cool!“>
<p>This would be child content of the box control.</p>
<asp:Button runat=“server“ Text=“This works too“ />
</uc1:Box>

In Box.ascx, put this:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Box.ascx.cs" Inherits="Box" %>
<div id="BoxDiv" runat="server" class="box">
<h3><asp:Literal id="TitleLiteral" runat="server"></asp:Literal></h3>
<asp:PlaceHolder id="ChildPlaceHolder" runat="server"></asp:PlaceHolder>
</
div>

In Box.ascx.cs, put this:

[ParseChildren( true, "ChildControls" )]
public partial class Box : System.Web.UI.UserControl
{
public string Title
{
get
{
return TitleLiteral.Text;
}
set
{
TitleLiteral.Text =
value;
}
}
/// <summary>
/// A collection of child controls nested in the user control's tags.
/// </summary>
public ControlCollection ChildControls
{
get
{
return ChildPlaceHolder.Controls;
}
}
}