【问题标题】:ASP.NET Loading a User Control in a RepeaterASP.NET 在中继器中加载用户控件
【发布时间】:2010-03-23 01:03:09
【问题描述】:

我有一个Repeater 控件,它可以加载我构建的自定义控件的实例。这个中继器看起来像这样:

<asp:Repeater ID="myRepeater" runat="server" OnLoad="myRepeater_Load">
  <HeaderTemplate>
    <table border="0" cellpadding="0" cellspacing="0">
  </HeaderTemplate>

  <ItemTemplate>
    <tr><td><my:CustomControl ID="myControl" runat="server" 
      OnLoad="myControl_Load" />
    </td></tr>
  </ItemTemplate>

  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>

我通过myRepeater_Load 事件处理程序绑定到中继器。我的自定义控件用于在中继器中呈现项目。因此,我试图在myControl_Load 事件处理程序期间设置自定义控件的属性。但是,我不知道如何在myControl_Load 事件期间访问当前项目。

有没有办法在myControl_Load 事件期间传递当前项目或访问当前项目?如果有,怎么做?

谢谢,

【问题讨论】:

    标签: asp.net


    【解决方案1】:
    <asp:Repeater ID="rptrDemo" runat="server" OnItemDataBound="rptrDemo_ItemDataBound">
        <ItemTemplate>
            <demo:Sample runat="server" ID="sampleControl" />
        </ItemTemplate>
    </asp:Repeater>
    
    
    protected void rptrDemo_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.DataItem != null)
        {
            SampleControl sampleControl = (SampleControl)e.Item.FindControl("sampleControl");
            // do whatever
        }
    }
    

    【讨论】:

      【解决方案2】:

      您需要使用中继器的 OnItemDatabound 事件。

      【讨论】:

      • 但是如何从 OnItemDataBound 事件访问我的自定义控件呢?
      • 事件 args 对象将允许您通过 e.Item.FindControl() 访问您的控件 - 但您必须强制转换它。我个人鄙视 OnItemDataBound 并不惜一切代价避免它
      • @Eric,你会推荐什么?我想知道替代方案。谢谢
      • @goku_da_master 另一种方法是简单地在 ASPX/ASCX 标记本身(以声明方式)中执行任何必要的数据绑定
      【解决方案3】:

      使用Repeater的OnItemDatabound事件

              void r_ItemDataBound(object sender, RepeaterItemEventArgs e)
          {
              if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
              {
                  CustomControl ctl = (CutonControl)e.Item.FindControl("myControl");
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2011-05-24
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多