0

我有一种情况,我想阅读 ITemplate 的内容。

例如我有类似的东西

<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>

基本上里面的内容InitScript是一些javascript,我想在ScriptManager.RegisterScript.

所以我的问题是我如何定义 InitScript ???

我试过了

public ITemplate InitScript;

这给了我CompiledTemplateBuilder对象,我如何阅读里面的内容InitScript???

感谢您的阅读,任何帮助将不胜感激...

4

1 回答 1

2

首先,您需要将模板实例化为模板容器控件。

下面是一个这样做的例子——一个带有InitScript属性的用户控件;此模板正在控件的OnPreRender方法中实例化。在此之后,您可以将此模板控件添加到用户控件子控件集合中,或者正如您在问题中所问的那样,将其呈现为字符串(我使用我的RenderControl实用程序方法将控件呈现为字符串):

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();
    }
}
于 2011-03-04T09:08:30.617 回答