Как реализовать LayoutTemplate с помощью PlaceHolder - PullRequest
0 голосов
/ 07 января 2011

В моем собственном управлении сервером я бы хотел реализовать что-то похожее на ListView:

<asp:ListView runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" id="itemPlaceholder" />
    </LayoutTemplate>
</asp:ListView>

Я создал свойство ITemplate, я могу установить макет на странице aspx, и я делаю ITemplate.InstantiateIn(myControl).

Но я не могу понять, как вставить элементы управления в заполнитель. Я предполагаю, что это будет что-то вроде MyTemplate.FindControl("itemPlaceholder").Controls.Add(myControl). Я попытался привести к типу моего ITemplate, но я получаю ошибку:

Unable to cast object of type 'System.Web.UI.CompiledTemplateBuilder' to type 'MyNamespace.MyLayoutTemplate'

Чего мне не хватает?

Редактировать: Я только что нашел это: http://www.nikhilk.net/SingleInstanceTemplates.aspx Control developers can define templates to be single instance using metadata which causes the ID'd controls within the template contents to be promoted to the page level... The parser and code-generator together work behind the scenes to add member fields, and initialize them at the right time.. Вроде бы только для пользовательских элементов управления? Я попытался Page.FindControl() после этого, но ничего не нашел.

Ответы [ 2 ]

1 голос
/ 07 января 2011

Хорошо, это просто вопрос ошибка пользователя .Я создал ITemplate в Panel, поэтому очевидно, что Page.FindControl() (что не является рекурсивным) не сработаетКак только я сделал Panel.FindControl(), все заработало.

0 голосов
/ 07 января 2011

В прошлом я использовал эту библиотеку с успехом http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

...