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);
}
}