【问题标题】:Best approach for styling navigation using unordered lists in ASP.NET在 ASP.NET 中使用无序列表设置导航样式的最佳方法
【发布时间】:2008-11-21 22:44:30
【问题描述】:

在 ASP.NET(不是 MVC)中,以编程方式在用于导航的无序列表上设置样式的最佳方法是什么,以便在查看该页面时将相应的菜单项设置为活动项?

这很可能与 MasterPage 结合使用。

【问题讨论】:

    标签: asp.net css


    【解决方案1】:

    您的问题的答案在很大程度上取决于您如何实现列表{用户控制与否等}。我会怎么做,是实现由用户控件生成的列表。

    我会为每个元素添加 UserControl 标记,例如:

    <{...} class="GeneratedMenuItem"> {...}
    

    我会在样式表中有适当的样式;当然,如果它在用户控件中,那么您也许可以使用主题(但这取决于您使用的 ASP.net 版本。

    【讨论】:

    • 如何使用使用主题?这将是一个 ASP.NET 2.0 应用程序(VS 2008 .Net 3.5)
    • 我已经有一段时间没有使用主题了,但我假设可以为他们的用户控件设置主题。现在,当我想到它时,我认为用户控件的主题不适用于 ASP.NET 2.0。我不确定它们是否在 .NET 3.5 中实现。
    【解决方案2】:

    好问题,自从 asp 的糟糕时代以来,我已经尝试过各种方法来做到这一点,但我还没有找到完美的锤子。

    一般来说,我使用 Request.Url.AbsoluteUri(或类似的)作为渲染函数的参数,并且通常在适当的节点上设置“当前”或类似的 css 类,以及渲染子节点根据需要。

    我最常使用 xml/xsl 组合,它通常可以在大多数 cms 平台上工作,尽管我从未对启动 xsl 转换以输出导航列表的开销感到满意,但如果你知道 xsl,是一个非常好的生成 html 的工具,并且你总是可以缓存输出 - 对于偶尔出现的小型静态 html 站点,我经常在构建过程中使用这种方法来呈现静态菜单标记。

    也使用过几次 aspnet 站点地图功能,如果您使用 css 友好的适配器,这非常好 - 默认呈现使标记非常难看。

    我在本周早些时候发现了这篇文章:http://blog.devarchive.net/2008/01/auto-generate-strong-typed-navigation.html,它使用 t4 模板创建了一个强类型导航类,我肯定会进一步调查。

    【讨论】:

      【解决方案3】:

      我采用这种方法的方式是为母版页中的每个导航项创建 ASP.NET 超链接控件。

      然后,我在母版页中创建了一个公共方法,该方法将适当的“选定”CSS 样式分配给我指定的控件:

      Public Sub SetNavigationPage(ByVal MenuName As String)
      
         DirectCast(Me.FindControl(MenuName), HyperLink).CssClass = "MenuCurrent"
      
      End Sub
      

      然后在我的内容页面中,我只需要相应地引用母版页。

      Dim myMaster As EAF = DirectCast(Me.Master, EAF)
      myMaster.SetNavigationPage("hypSearchRequest")
      

      这让我可以灵活地在各个页面上添加/删除导航项,并且还能够在必要时将多个页面分配给管理员导航选项。

      值得注意的是,引用超链接控件和设置 Visibility 属性(用于隐藏管理页面)不起作用。这是由于主页面和内容页面的加载顺序。相反,我创建了另一个 CSS 类,它简单地设置了可见性属性并使用了与上面相同的方法。

      【讨论】:

      • 如果您在 CSS 中设置了 visibility 属性,菜单在标记中仍然可见,但不会在浏览器中显示。这将使查看您的标记的人知道有更多可用菜单。我认为服务器端可见性是一种更好的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多