ASP.NET2.0 Menu Control set static item selected when select its child dynamic items

 

Menu控件是将当前的url与其自身items中的url做比较,将相同的item置于选中状态。但是通常我们只是显示一级静态item,这样动态item处于选中状态时我们是不能直接看到的,只能在打开静态menuitem的下拉列表才能看到。而且有时我们根本就不显示动态items。而我们通常的需求是:只要是在sitemap文件里被组织在一个树型结构里的页面,我都希望在进入它时,menu控件的对应根节点处于选中状态,这样再配合selectedstyle,我们很容易将网站各个功能模块用不同的样式区分开。

很可惜menu控件默认不支持这个功能,下个版本据说会加进去。目前我们可以通过控制MenuItemDataBound事件来实现,如下:

        if (e.Item.Selected && e.Item.Parent != null)
        {
            e.Item.Parent.Selected = true;
        }

这么做的前提时你要显示出所有的dynamic items,也就是说MaximumDynamicDisplayLevels属性要>0。但是有时并不想显示dynamic items,只需在做完上面的判断后,动态移除子items:

        if (e.Item.Parent != null)
        {
            e.Item.Parent.ChildItems.Remove(e.Item);
        }

以下时完整代码:

    protected void Menu1_MenuItemDataBound(object sender, MenuEventArgs e)
    {
        if (e.Item.Selected && e.Item.Parent != null)
        {
            e.Item.Parent.Selected = true;
        }

        if (e.Item.Parent != null)
        {
            e.Item.Parent.ChildItems.Remove(e.Item);
        }
    }

 

你可能感兴趣的:(asp.net)