如何将web用户控件添加到中继器

本文关键字:添加 中继器 控件 用户 web | 更新日期: 2023-09-27 18:12:34

场景:

  • UsrControl:自定义用户控件,包含一个文本框和一个按钮,水平重新绘制(在一行中(。

  • UsrControlContainer:自定义用户控件,它应该能够显示多个UsrControl对象(每个对象在单独的行中,因此Seperator模板可能是<br />。该控件还包含一个按钮,它将新的UsrControl添加到集合中。

我的代码:

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"/>
<asp:Repeater ID="rptExample" runat="server">
    <ItemTemplate>
    </ItemTemplate>
    <SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>

和:

protected void Button1_Click(object sender, EventArgs e)
{
    rptExample.DataSource = new List<UsrControl> {new UsrControl(), new UsrControl()};
    rptExample.DataBind();
}

一个简单的问题——我应该在ItemTemplate中放入什么才能使其工作?

编辑-我还想在渲染之前将一些参数传递给UsrControl。

如何将web用户控件添加到中继器

<asp:Repeater ID="rptExample" runat="server">
     <ItemTemplate>
          <uc:UsrControl runat="server" />
     </ItemTemplate>
     <SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>
protected void Button1_Click(object sender, EventArgs e)
{
    rptExample.DataSource = Enumerable.Range(0, 2);
    rptExample.DataBind();
}

回答您的问题。您可以捕获ItemDataBound事件中的每个绑定对象。例如,正如我所使用的,将整个对象设置为用户控件属性。

protected void PersonesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        PersonLine line = (PersonLine)e.Item.FindControl("Person1");
        line.Person = e.Item.DataItem as Osoba;
    }
}

当然,您必须将事件处理程序添加到中继器中:

<asp:Repeater runat="server" ID="PersonesRepeater" OnItemDataBound="PersonesRepeater_ItemDataBound"><ItemTemplate>
        <my:Person ID="Person1" runat="server" />
    </ItemTemplate>
</asp:Repeater>