我有这样的情况,我想阅读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
内的内容???
感谢阅读,任何帮助都将受到高度赞赏...
答案 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();
}
}