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();
    }
}
Другие вопросы по тегам