You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将外层Repeater的Students属性作为嵌套Repeater的数据源?

问题与解决:ASP.NET WebForms嵌套Repeater绑定关联数据

问题背景

原本使用Repeater控件展示学生列表,现在需要将Repeater的数据源从Student[]改为Teacher[],并为每位教师展示其名下所有学生。

对象结构

Teacher{
    string teacherName
    Student[] students
}

Student{
    string studentName
}

疑问与尝试

已知需要使用嵌套Repeater,但不清楚如何将外层Repeater的students属性作为内层Repeater的数据源,尝试的伪代码如下:

<asp:Repeater runat="server" DataSourceID="Teachers">  
    <ItemTemplate>
        <Eval(teacherName)> 
        <asp:Repeater runat="server" DataSourceID="<Eval(students)">
            <ItemTemplate>                                                
                <Eval(studentName)> 
            </ItemTemplate>           
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

解决方法

方法1:通过ItemDataBound事件绑定(后端控制)

  1. 前端代码调整:给内层Repeater设置ID,移除错误的DataSourceID绑定:
<asp:Repeater ID="rptTeachers" runat="server" OnItemDataBound="rptTeachers_ItemDataBound">  
    <ItemTemplate>
        <h3><%# Eval("teacherName") %></h3>
        <asp:Repeater ID="rptStudents" runat="server">
            <ItemTemplate>                                                
                <p><%# Eval("studentName") %></p>
            </ItemTemplate>           
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>
  1. 后端代码实现:在外层Repeater的ItemDataBound事件中,获取当前教师对象并绑定内层Repeater:
protected void rptTeachers_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Teacher teacher = (Teacher)e.Item.DataItem;
        Repeater rptStudents = (Repeater)e.Item.FindControl("rptStudents");
        rptStudents.DataSource = teacher.students;
        rptStudents.DataBind();
    }
}

方法2:直接通过数据绑定表达式赋值(更简洁)

无需后台事件,直接在前端通过绑定表达式将外层的students属性赋值给内层Repeater的DataSource,注意使用单引号包裹表达式避免冲突:

<asp:Repeater ID="rptTeachers" runat="server" DataSourceID="Teachers">  
    <ItemTemplate>
        <h3><%# Eval("teacherName") %></h3>
        <asp:Repeater ID="rptStudents" runat="server" DataSource='<%# Eval("students") %>'>
            <ItemTemplate>                                                
                <p><%# Eval("studentName") %></p>
            </ItemTemplate>           
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

内容的提问来源于stack exchange,提问作者Blizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:05:15