繁体   English   中英

用嵌套中继器开发自定义Asp.net控件

[英]Developing a Custom Asp.net Control with Nested Repeaters

我从未创建过自定义控件,因此请记住,这是我的问题:

是否可以使用嵌套中继器创建自定义控件?

用法将是这样的:

<tag:NestedRepeater id="foo" runat="server" levels="6"/>

我目前有6个相同的中继器相互嵌套。 然后,我使用ItemDataBound事件来绑定该孩子,该孩子再绑定其孩子。 事件链如何在自定义控件中发生? 我希望能够只有一个引用自身的中继器模板。 那可能吗?

在尝试执行此操作之前,我是否有明显的忽略或应该知道的信息?

这当然是可能且简单的-您必须创建一个模板化控件以接受页眉,页脚和项目模板。 这就是我要做的

  1. 自己从Repeater继承我的控件,这样就不必为模板属性提供代码。

  2. 添加其他属性,例如级别。 还添加诸如NestedPlaceholderId之类的属性,该属性将告诉我容器控件ID将子级中继器嵌套在何处。

  3. 覆盖诸如OnItemDataBound之类的方法,以防止引发默认的ItemDataBoundEvent。 我的实现将引发一个自定义事件(例如NestedItemDataBound),该事件将通过事件参数属性传递当前的嵌套级别。 消费者应通过事件args属性发送适当的数据源。

  4. 如果使用者提供数据源,则使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM