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

时间:2010-10-12 06:51:58

标签: c# asp.net

我从来没有创建过自定义控件,所以请记住这是我的问题:

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

用法如下:

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

我目前有6个相同的中继器彼此嵌套。然后我使用ItemDataBound事件来绑定然后绑定其子项的子项。如何在自定义控件中发生这种事件链接?我希望能够只有一个引用自己的转发器模板。这可能吗?

在尝试这样做之前,有什么明显的东西我忽略或应该知道吗?

1 个答案:

答案 0 :(得分:1)

这当然可能也很简单 - 你必须创建一个模板控件来接受页眉,页脚和项目模板。这就是我要做的事情

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

  2. 添加其他属性,例如“级别”。还要添加一个属性,例如 NestedPlaceholderId ,它将告诉我容器控件id嵌套子转发器的位置。

  3. 覆盖OnItemDataBound等方法以防止提升默认的ItemDataBoundEvent。我的实现将引发一个自定义事件(比如NestedItemDataBound),它将通过事件参数属性传递当前的嵌套级别。消费者需要通过event args属性发送适当的数据源。

  4. 如果使用者提供数据源,则使用 NestedPlaceholderId 在给定项目中找到占位符。创建新的嵌套转发器并将其添加到占位符,将其模板设置为与当前模板相同,设置其事件处理程序,以便您可以冒泡ItemDataBound事件并最终设置数据源并将其绑定。

  5. 这样您就可以使用语法来使用控件,例如

    <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>