我发现在不担心数据绑定事件的情况下进行嵌套中继器的最简单方法是使用<%# %>
语法设置 DataSource。
例如:
<asp:Repeater runat="server" id="Departments">
<ItemTemplate>
Name: <%# Eval("DeptName") %>
Employees:
<asp:Repeater runat="server" DataSource='<%# Eval("Employees") %>'>
<ItemTemplate><%# Eval("Name") %></ItemTemplate>
<SeparatorTemplate>,</SeparatorTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
这是假设您的 Departments 类具有 Employees 属性 - 例如:
public class Department {
public string DeptName {get; set;}
public IEnumerable<Employee> Employees {get; set;}
}
public class Employee {
public string Name {get; set;}
}
如果您的外部中继器对象没有与内部中继器对象对应的属性,您仍然可以使用此技巧,方法是在您的代码隐藏中添加一个进行计算的方法。所以你的内部中继器可能会变成:
<asp:Repeater runat="server" DataSource='<%# GetEmployees(Container.DataItem) %>'>
然后 GetEmployees 可能看起来像:
protected IEnumerable<Employee> GetEmployees(object item) {
var dept = (Department) item;
// then do whatever is necessary to get the employees from dept
return employees;
}