2011-05-16 41 views
0

我是一个前端开发人员,与看似无能的.NET开发人员合作,似乎无法解决为什么ASP菜单控件不显示选定的菜单项。 .NET开发人员向我发送了以下代码。是否有一些规则缺失,需要启用CSS?为什么没有为ASP菜单控件设置“选定”类?

在此先感谢

控制器配置

<asp:Menu ID="mnuMaster" 
          runat="server" 
          DataSourceID="sitemapMaster" 
          StaticDisplayLevels="1" 
          MaximumDynamicDisplayLevels="0" 
          Orientation="Horizontal" 
          StaticEnableDefaultPopOutImage="False" 
          CssSelectorClass="TopMainMenu" onmenuitemdatabound="mnuMaster_MenuItemDataBound" 
          StaticBottomSeparatorImageUrl="~/App_Themes/PCTools/Images/top_menu_separator.gif" 
          ></asp:Menu> 

CSS选择类

.TopMainMenu .AspNet-Menu li a:active, .TopMainMenu li.AspNet-Menu-Selected a,.TopMainMenu li.AspNet-Menu-ChildSelected a,.TopMainMenu li.AspNet-Menu-ParentSelected a { 
    background:url(Images/navbg.gif) repeat-x 0 -86px; 
} 
+0

您是不是指您正在设置特定的css属性/目前导航页面上的课程? – 2011-05-16 13:44:53

+0

嗨,是啊所以即时风格.AspNet菜单 - 我选择的等等,我认为是什么控制添加到选定的菜单项,但我的风格arent显示和当我查看页面的源它不出现控件将类添加到选定的项目 – htmlr 2011-05-16 13:48:37

+0

我认为菜单控件在进入子项目或悬停时考虑选择您点击的那个。林不是100%肯定我会发布回答我通常如何突出显示当前导航标签 – 2011-05-16 20:17:38

回答

0

我们通常使用普通的HTML标准UL组设计人员提供再使他们成为HTML服务器标签。

可能还有其他解决方案,但我们通常所做的解决方案就是这样。

首先,每个顶级菜单项都需要一个ID。

如果菜单上的母版(即时通讯将假设它是)

在母版后面的代码,你可以把这样的代码。

//Discover currently navigated page TYPE 
if (this.Page is `pagetype of the current page`) 
    //add a CSS class to the top level menu item 
    miFirstMenuItem.Attributes["class"] += " highlightedMenuItemCSSClass"; 

然后HTML输出将追加额外的CSS类要应用特定的风格,菜单项

继承人现实生活中的例子 节点,你将不得不改变在SetActiveTab方法的类型正确类型的菜单项

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      bool homeVisited  = Page is Default; 
      bool productsVisited = Page is Products_List; 
      bool demoVisited  = Page is Demonstrations; 
      bool contactVisited  = Page is Contact; 

      if (homeVisited) 
       SetActivePage(hlHome, ButtonSide.Left); 
      if (productsVisited) 
       SetActivePage(hlProducts, ButtonSide.Middle); 
      if (demoVisited) 
       SetActivePage(hlDemo, ButtonSide.Middle); 
      if (contactVisited) 
       SetActivePage(hlContact, ButtonSide.Right); 

     } 
    } 

这表明比我上述不同的方法,但可以用link.Attributes [“类”] + =“的CssClass”替换它;注意第一”之后的空间。

而且ButtonSide是我,因为所有的中间的菜单项中添加将具有相同的CSS类在我的具体情况和左右两个以及一个枚举。

private void SetActivePage(HyperLink link, ButtonSide side) 
    { 
     if (side == ButtonSide.Left) 
      link.CssClass = "currentleft"; 
     if (side == ButtonSide.Middle) 
      link.CssClass = "currentmiddle"; 
     if (side == ButtonSide.Right) 
      link.CssClass = "currentright"; 
    } 
+0

嗨latr0dectus,感谢您与代码片段的努力,但我相信我们被限制使用ASP菜单控制器。你有没有经历过使用这个控制器,并知道问题可能是什么? – htmlr 2011-05-17 13:02:01

0

有似乎是VS201/.Net4中的错误,其中您在asp.menu属性中指定的CSS类名称StaticSelectedStyle & DynamicSelectedStyle将被忽略。菜单始终使用类名“selected”。

相关问题