我从来没有创建过自定义控件,所以请记住这是我的问题:
是否可以使用嵌套转发器创建自定义控件?
用法如下:
<tag:NestedRepeater id="foo" runat="server" levels="6"/>
我目前有6个相同的中继器彼此嵌套。然后我使用ItemDataBound事件来绑定然后绑定其子项的子项。如何在自定义控件中发生这种事件链接?我希望能够只有一个引用自己的转发器模板。这可能吗?
在尝试这样做之前,有什么明显的东西我忽略或应该知道吗?
答案 0 :(得分:1)
这当然可能也很简单 - 你必须创建一个模板控件来接受页眉,页脚和项目模板。这就是我要做的事情
从Repeater继承我的控件,这样我就不必为模板属性提供代码了。
添加其他属性,例如“级别”。还要添加一个属性,例如 NestedPlaceholderId ,它将告诉我容器控件id嵌套子转发器的位置。
覆盖OnItemDataBound等方法以防止提升默认的ItemDataBoundEvent。我的实现将引发一个自定义事件(比如NestedItemDataBound),它将通过事件参数属性传递当前的嵌套级别。消费者需要通过event args属性发送适当的数据源。
如果使用者提供数据源,则使用 NestedPlaceholderId 在给定项目中找到占位符。创建新的嵌套转发器并将其添加到占位符,将其模板设置为与当前模板相同,设置其事件处理程序,以便您可以冒泡ItemDataBound事件并最终设置数据源并将其绑定。
这样您就可以使用语法来使用控件,例如
<tag:NestedRepeater id="foo" runat="server" levels="6" NestedPlaceholderId="Nested">
<ItemTemplate>
<p>
<span>[some data binding expression]</span>
<div class="nested">
<asp:PlaceHolder runat="server" ID="Nested" /></li>
</div>
</p>
</ItemTemplate>
</tag:NestedRepeater>