MenuItem
オブジェクトのリストの形でメニューを表示することができます(それぞれが空の場合もあります)。サブタイトルのリストは実際にはList<MenuItem>
を意味します。このサブコレクションはサブリピータのデータソースとしてIEnumerable<T>
をプロパティMenuItem.SubItems
として実装する必要があるため、メニューレベルを1つループして次の呼び出しを呼び出すUserControl
をおそらく使用できます。で
UserControl
あなたはこのような何かを持っていると思います。各項目テンプレートのために同じことがレンダリングされるようにItemTemplate
で
<li><a href='<%= this.MenuItem.Url %>'><%= this.MenuItem.LinkText %></a></li>
<asp:Repeater ID="UCRepeater" runat="server">
<HeaderTemplate>
<ul>
<ItemTemplate>
<menu:MenuItem ID="MenuItemUC" runat="server" />
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
UserControl
は、同じものです。以下は
コードは、このユーザーコントロールの背後にある、と魔法が起こる場所です:
public partial class MenuItemUserControl : UserControl
{
// A property we'll use as the data source
public MenuItem MenuItem { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
// If the current menu item has sub items, we bind the repeater to them
// And by the way, there is no use doing this on every postback. First
// page load is good enough...
if(!Page.IsPostBack) {
{
if(MenuItem.SubItems.Count > 0)
{
UCRepeater.DataSource = MenuItem.SubItems;
UCRepeater.DataBind();
}
}
}
protected void UCRepeater_OnItemDataBound(object sender,
RepeaterDataBoundEventArgs e)
{
// Every time an Item is bound to the repeater, we take the current
// item which will be contained in e.DataItem, and set it as the
// MenuItem on the UserControl
// We only want to do this for the <ItemTemplate> and
// <AlternatingItemTemplate>
if(e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
var uc = (MenuItemUserControl)e.Item.FindControl("MenuItemUC");
if(uc != null)
{
// This is the magic. Abrakadabra!
uc.MenuItem = (MenuItem)e.DataItem;
}
}
}
}
だから、仕事にこれを取得するためには、不足している唯一の事は本当にあなたを得るための良い方法ですデータはMenuItem
の階層リストとして出力されます。これはあなたのデータアクセスレイヤーに任せます(LINQ to SQLまたはEntity Frameworkを使用すると簡単に安価にできます))
免責事項:このコードはそのまま提供され、私はそれを上から書きました私の頭の。私はそれをテストしていませんが、それはうまくいくと思います。もしそうでなければ、少なくともあなたは問題を解決する方法を知ることができます。問題がある場合は、コメントに投稿してください。私は助けようとしますが、ここで成功するという約束はありません。手伝ってくれるだけの意欲! =)
ありがとうございました。 –