这是我的代码结构。
转发器标记:
<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 | ParrentMenuID | MenuUrl
我有几行ParentMenuID
是0
和NOT NULL
。
但由于某些原因,Repeater
控件未在网站上列出任何内容。
Repeater控件没有显示任何内容的原因是什么?
答案 0 :(得分:1)
我认为即使您在标记中提供了数据源,页面仍然需要绑定。
在页面加载事件中写下Page.DataBind();
:
protected void Page_Load(object sender, EventArgs e)
{
Page.DataBind();
}
如何使用嵌套转发器:
您似乎必须处理ParentRepeater_ItemDataBound
事件以绑定子转发器控件。
查看此文章here。
答案 1 :(得分:0)
您必须设置值并绑定转发器
RPMenu.DataSource=<value you want to set>;
RPMenu.DataBind();
答案 2 :(得分:0)
两个现有答案的组合最接近真实。
在hashmap
事件处理程序中运行Page.DataBind()
,而不是运行可能有意外副作用的RPMenu.DataBind()
。它将使用在代码前设置的Page_Load
。
内部中继器应自动绑定。您只需要显式绑定最外层的Repeater。