ASP.Net ITemplate - how do i read the raw content defined inside

1.1k Views Asked by At

i have situation where in i would like to read the content of the ITemplate.

for example i have something like

<WD:PopUpPanel runat="server" ID="MyPoPUp">
<InitScript>
    // javascript
    document.getElementByID('urName').value = 'enter your name';
</InitScript>
<Content>
    Name:<asp:TextBox runat="Server" ID="urName"/>
</Content>
</WD:PopUpPanel>

basically the contents inside the InitScript is some javascript, which i want to use in ScriptManager.RegisterScript.

so my question is how do i define InitScript???

i tried

public ITemplate InitScript;

this gives me CompiledTemplateBuilder object, how do i read the content inside InitScript ???

thanks for reading, any help would be highly appreciated...

1

There are 1 best solutions below

2
On

Firstly you need to instantiate your template into a template container control.

Below is an example of doing this - a user control with InitScript property; this template is being instantiated in the control's OnPreRender method. After this you could just add this template control to the user control child control collection or, as you asked in your question, render it as a string (I use my RenderControl utility method to render control as a string):

public class MyControl : UserControl
{
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public ITemplate InitScript { get; set; }

    protected override void OnPreRender(EventArgs e)
    {
        if (this.InitScript != null)
        {
            Control templateContainer = new Control();
            InitScript.InstantiateIn(templateContainer);
            //Controls.Add(templateContainer);

            // here is "a raw" content of your template
            var s = RenderControl(templateContainer);
        }
    }

    private string RenderControl(Control control)
    {
        StringBuilder sb = new StringBuilder();
        using (StringWriter stringWriter = new StringWriter(sb))
        {
            using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter))
            {
                control.RenderControl(textWriter);
            }
        }

        return sb.ToString();
    }
}