Search code examples
asp.netcontrolscustom-controlsweb-controlsfindcontrol

How to move ASP.NET PlaceHolder control from Page controls collection to a custom Control's output?


I am writing an ASP.NET custom control.

In my custom control code, I find a PlaceHolder control in the page like so:

this.myPlaceholder = Page.FindControl("placeholder1") as PlaceHolder;

Then, I render the placeholder as the output of the custom control:

protected override void Render(HtmlTextWriter output)
{
    if (this.myPlaceholder != null)
    {
        this.myPlaceholder.RenderControl(output);
    }
}

However, this causes the placeholder to be rendered in two places - in the custom control output (good) and in the original location in the page (bad).

Is there any way I can remove this placeholder from the page so it is only output inside the custom control?


Solution

  • The Page object (and all web controls) has a collection of controls... called, conveniently enough, Controls. So Page.Controls.Remove(myPlaceholder) should do the trick.

    Although... ASP.NET might complain about a control modifying its parent. In that case, you probably need to call a method on your parent page to do the dirty work, or fire off an event that your parent handles.