中继器数据源连接不工作

本文关键字:工作 连接 数据源 中继器 | 更新日期: 2023-09-27 18:01:59

这是我的代码结构。

中继标记:

<asp:Repeater runat="server" ID="RPMenu" DataSource='<%# Menues.GetAllMainMenu() %>'>
     <ItemTemplate>
          <%# Eval("MenuName") %><br />
          <asp:Repeater runat="server" ID="RPMenuUnder" DataSource='<%# Menues.GetAllMainMenu(Convert.ToInt32(Eval("MenuID"))) %>'>
               <ItemTemplate>
                    <%# Eval("MenuName") %><br />
               </ItemTemplate>
          </asp:Repeater>
     </ItemTemplate>
</asp:Repeater>

菜单类:

public static List<Menu> GetAllMainMenu(int parrentID = 0)
{
    using (Scooterfrøen_Entities db = new Scooterfrøen_Entities())
    {
        return db.Menu.Where(i => i.ParentMenuID == parrentID).ToList();
    }
}
数据库表

:MenuID | MenuName | MenuDescription | parentmenuid | MenuUrl

我有几行ParentMenuID0NOT NULL

但是由于某些原因Repeater控制没有在站点上列出任何内容。

中继器控制不显示任何东西的原因是什么?

中继器数据源连接不工作

我认为即使您在标记中提供了数据源,页面仍然需要绑定。在页面加载事件中写入Page.DataBind();:

protected void Page_Load(object sender, EventArgs e)
{
    Page.DataBind();
}

如何使用嵌套的重复器:
似乎你必须处理ParentRepeater_ItemDataBound事件绑定子重复器控制。

在这里查看本文。

您必须设置值并绑定repeater

RPMenu.DataSource=<value you want to set>;
RPMenu.DataBind();

两个现有答案的组合最接近正确。

Page_Load事件处理程序中运行RPMenu.DataBind(),而不是运行Page.DataBind(),这可能会产生意想不到的副作用。它将使用在代码前设置的DataSource

内部中继器应该自动绑定。您只需要显式地绑定最外层的Repeater。