ASP.Net ITemplate - 我如何阅读里面定义的原始内容

时间:2010-04-08 20:04:54

标签: asp.net itemplate

我有这样的情况,我想阅读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内的内容???

感谢阅读,任何帮助都将受到高度赞赏...

1 个答案:

答案 0 :(得分:2)

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

以下是执行此操作的示例 - 具有InitScript属性的用户控件;此模板正在控件的OnPreRender方法中实例化。在此之后,您可以将此模板控件添加到用户控件子控件集合中,或者如您在问题中提到的那样,将其呈现为字符串(我使用我的RenderControl实用程序方法将控件呈现为字符串):< / p>

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();
    }
}