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 ответ
Во-первых, вам нужно создать экземпляр шаблона в элементе управления контейнером шаблона.
Ниже приведен пример этого - пользовательский элемент управления с 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();
}
}