在ASP.NET中使用无序列表进行样式导航的最佳方法

时间:2008-11-21 22:44:30

标签: asp.net css

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

这很可能与MasterPage结合使用。

3 个答案:

答案 0 :(得分:1)

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

我的UserControl标记每个元素都有:

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

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

答案 1 :(得分:1)

好问题,自从asp的糟糕时光以来,我已经玩过各种各样的方法,而且还没有找到完美的锤子。

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

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

还使用了几次aspnet站点地图功能,如果你使用css友好的适配器,这是非常好的 - 默认渲染会产生非常难看的标记。

我之前发现这篇文章是weeek:http://blog.devarchive.net/2008/01/auto-generate-strong-typed-navigation.html,它使用t4模板创建一个强类型的导航类,我肯定会进一步调查。

答案 2 :(得分:0)

我采用这种方法的方法是为我母版页中的每个导航项创建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类,只需设置visibility属性并使用与上面相同的方法。