在我自己的服务器控件中,我想实现与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()
,但没找到任何东西。
答案 0 :(得分:1)
好的,这只是用户错误的问题。我在ITemplate
中实例化Panel
,所以显然Page.FindControl()
(不是递归的)不起作用。一旦我做Panel.FindControl()
,一切正常。
答案 1 :(得分:0)