Вопрос

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

Это было полезно?

Решение

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

Другие советы

В прошлом я использовал эту библиотеку с Sucesshttp://www.denisbauer.com/aspnetcontrols/dynamiccontrolsmoholder.aspx.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top