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

C# 使用嵌套的中继器开发自定义Asp.net控件,c#,asp.net,C#,Asp.net,我从未创建过自定义控件,因此,除非记住这一点,否则我的问题是: 是否可以使用嵌套的中继器创建自定义控件 用法如下所示: <tag:NestedRepeater id="foo" runat="server" levels="6"/> 我目前有6个相互嵌套的相同中继器。然后,我使用ItemDataBound事件绑定子对象,然后子对象绑定其子对象。这种事件链接是如何在自定义控件中发生的?我希望能够有一个重复模板,引用自己。可能吗 在尝试执行此操作之前,是否有任何明显的遗漏或应该知道

我从未创建过自定义控件,因此,除非记住这一点,否则我的问题是:

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

用法如下所示:

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

我目前有6个相互嵌套的相同中继器。然后,我使用ItemDataBound事件绑定子对象,然后子对象绑定其子对象。这种事件链接是如何在自定义控件中发生的?我希望能够有一个重复模板,引用自己。可能吗


在尝试执行此操作之前,是否有任何明显的遗漏或应该知道的内容?

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

  • 从Repeater it self继承我的控件,这样我就不必为模板属性提供代码

  • 添加其他属性,例如标高。还添加一个属性,如NestedPlaceholder id,该属性将告诉我容器控件id在何处嵌套子中继器

  • 重写方法,例如防止引发默认ItemDataBoundEvent。我的实现将引发一个自定义事件(比如NestedItemDataBound),该事件将通过事件参数属性传递当前嵌套级别。使用者应通过事件args属性发送适当的数据源

  • 如果使用者提供数据源,则使用NestedPlaceholder ID在给定项中定位占位符。创建新的嵌套repeater并将其添加到占位符中,将其模板设置为与当前模板相同,设置其事件处理程序,以便可以冒泡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>
    
    
    
    [一些数据绑定表达式]