数据库?页面变量?枚举?
我在这里寻找意见。
答案 0 :(得分:4)
ASP.NET Sitemap功能是为此而构建的,并且在很多情况下都能正常运行。如果你到了想要Menu to look different from your Sitemap, here are some workarounds的地方。
如果您有动态网站结构,则可以create a custom sitemap provider。你可能会遇到麻烦而不是它的价值,但通常从你的站点地图填充你的菜单会给你一些很好的功能,比如安全修整,其中菜单选项适合登录用户。
答案 1 :(得分:2)
这是一个有趣的问题,有很多方法可以解决它。
您可以从XML加载菜单结构,这就是内置ASP.NET导航控件/“站点地图”设置的工作方式。这可能是一个很好的选择,在Visual Studio中有相当好的工具。
如果它是一个需要改变很多的动态菜单,从数据库中获取项目可能是一个好主意,但你肯定想要缓存它们,因此数据库不会在每个页面渲染上受到影响。 / p>
答案 2 :(得分:1)
我使用ASP.NET Login Controls和Forms Authentication创建了一个网站,用于ASP.NET Web应用程序的成员资格/凭据。我正在使用site map进行网站导航。
我使用SiteMapDataSource填充了ASP.NET TreeView和Menu导航控件。但是,非管理员用户可以看到禁止管理员的页面。
我创建了一个web.sitemap站点地图文件。我used the ASP.NET Web Site Administration Tool to set up access rules。
我在.master页面上添加了导航控件......
<asp:SiteMapPath ID="SiteMapPath1" runat="server" />
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource2" />
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" />
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<asp:SiteMapDataSource ID="SiteMapDataSource2" runat="server" ShowStartingNode="False" />
我在web.config文件中将securityTrimmingEnabled设置为“true”...
<?xml version="1.0"?>
<configuration>
...
<system.web>
...
<siteMap defaultProvider="default">
<providers>
<clear/>
<add name="default"
type="System.Web.XmlSiteMapProvider"
siteMapFile="web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
...
</system.web>
...
</configuration>
我调整了文件后面的master.vb代码中的树...
Protected Sub TreeView1_DataBound( ByVal sender As Object, ByVal e As EventArgs ) Handles TreeView1.DataBound
'Collapse unnecessary menu items...
If TreeView1.SelectedNode IsNot Nothing Then
Dim n As TreeNode = TreeView1.SelectedNode
TreeView1.CollapseAll()
n.Expand()
Do Until n.Parent Is Nothing
n = n.Parent
n.Expand()
Loop
Else
TreeView1.ExpandAll()
End If
End Sub
答案 3 :(得分:0)
如果菜单是动态的 per-user ,则您必须为每个用户点击数据库。从那时起,我可能会将其存储在会话中,以避免将来往返数据库。
如果它是动态的,但是整个站点看到相同的项目,那么将它放在数据库中并缓存结果
答案 4 :(得分:0)
绑定到Sitemap肯定是最简单的。
答案 5 :(得分:0)
这完全取决于网站的运作方式。我同意大多数人认为站点地图通常是最好的方法。但是,如果您使用的是CMS,则可能需要将其保留在数据库中。如果您有一个以分类为中心的站点,那么使用分类法来构建菜单。导航没有“最佳方式”,只是针对特定情况的最佳方式。
答案 6 :(得分:0)
我们有类似的功能。
应用程序菜单从数据库加载到母版页上,因为可见菜单选项取决于用户的权限。
数据库上的一些约定和巧妙的结构确保菜单加载代码是通用的,并在选择某个菜单选项时自动导航到正确的屏幕。我们使用UIP导航和ComponentArt进行Web控件。
BTW ComponentArt很糟糕。然后我再次假设所有第三方控制库都这样做。
答案 7 :(得分:0)
从用户的角度来看,高效访问是一项原始功能。 通用的暗示方法是 dictionary lookup, 这也很适合大型和嵌套的菜单结构。 用户通过点击或唯一按键导航,另外箭头键向前/向下(向右)或向上(向左)向上/向下照常导航。我建议根据请求填充菜单,除了初始菜单,并在选择最终元素时提供javascript操作。