2010-02-26 40 views
0

我在写一个ASP.NET自定义控件。如何将ASP.NET控件页面控件集合中的ASP.NET PlaceHolder控件移动到自定义控件的输出中?

在我的自定义控制代码,我觉得像这样的页面的占位符控制:

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

然后,我使占位符自定义控件的输出:

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

然而,这会导致占位符被渲染到两个地方 - 自定义控件输出(好)和页面原始位置(不好)。

有没有什么办法可以从页面中删除这个占位符,所以它只在自定义控件中输出?

回答

3

页面对象(和所有网页控件)都有一个控件的集合...足够方便地调用控件。所以Page.Controls.Remove(myPlaceholder)应该做到这一点。

虽然... ASP.NET可能会抱怨修改其父项的控件。在这种情况下,您可能需要在父页上调用一个方法来执行肮脏的工作,或者触发父代处理的事件。

+0

+1你几秒钟就打败了我。删除我的答案,因为你更好 – PHeiberg 2010-02-26 20:34:32

+0

我从上面的Render方法中调用了Page.Controls.Remove(this.myPlaceholder)。我收到错误“收集已修改;枚举操作可能无法执行”。 – frankadelic 2010-02-26 20:39:50

+1

正确...操作顺序在这里很重要。您必须在Render事件启动之前删除此页面。在PreRender中执行。 – Bryan 2010-02-26 20:50:46