获取ASP.NET System.Web.UI.WebControls.PlaceHolder的内容

时间:2010-12-23 16:32:16

标签: c# asp.net controls placeholder composite-controls

我有一个服务器控件,其PlaceHolder是InnerProperty。在渲染类时,我需要获取应该在PlaceHolder中的文本/ HTML内容。以下是前端代码的示例:

<tagPrefix:TagName runat="server">
    <PlaceHolderName>
      Here is some sample text!
    </PlaceHolderName>
</tagPrefix:TagName>

这一切都很好,除了我不知道如何检索内容。我没有看到PlaceHolder类暴露的任何渲染方法。这是服务器控件的代码。

public class TagName : CompositeControl
{
    [TemplateContainer(typeof(PlaceHolder))]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public PlaceHolder PlaceHolderName { get; set; }

    protected override void RenderContents(HtmlTextWriter writer)
    {
       // i want to retrieve the contents of the place holder here to 
       // send the output of the custom control.
    }        
}

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

我刚刚找到了解决方案。由于我使用PlaceHolder对象的上下文,我没有看到渲染方法。例如,我试图将它用作值并将其分配给字符串,如下所示:

string s = this.PlaceHolderName...

因为它位于等于Intellisense的右侧,所以没有向我展示渲染方法。以下是使用和HtmlTextWriter渲染PlaceHolder的方法:

   StringWriter sw = new StringWriter();
   HtmlTextWriter htw = new HtmlTextWriter(sw);
   this.PlaceHolderName.RenderControl(htw);
   string s = sw.ToString();

答案 1 :(得分:1)

将此作为第二个答案发布,以便我可以使用代码格式。这是一个使用Generics的更新方法,并使用'using'功能自动处理text / html编写器。

    private static string RenderControl<T>(T c) where T : Control, new()
    {
        // get the text for the control
        using (StringWriter sw = new StringWriter())
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            c.RenderControl(htw);
            return sw.ToString();
        }
    }