ASP.Net ITemplate - как читать необработанный контент, определенный внутри - PullRequest
0 голосов
/ 09 апреля 2010

У меня есть ситуация, когда я хотел бы прочитать содержимое 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 Ответ

2 голосов
/ 04 марта 2011

Во-первых, вам нужно создать экземпляр шаблона в элементе управления контейнером шаблона.

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