在母版页上填充菜单控件的最佳方法是什么?
数据库?页面变量?枚举?
我在这里寻找意见。
解决方案
回答
如果菜单是针对每个用户的动态菜单,则我们必须为每个用户访问数据库。从那时起,我可能会将其存储在会话中,以避免将来往返数据库。
如果它是动态的,但是整个站点看到相同的项目,则将其放入数据库中并缓存结果
回答
绑定到站点地图当然是最简单的。
回答
这是一个有趣的问题,有很多解决方法。
我们可以从XML加载菜单结构,这就是内置ASP.NET导航控件/"站点地图"设置的方式。总体上来说,这可能是一个不错的选择,并且在Visual Studio中有相当不错的工具。
如果它是一个动态菜单,需要进行很多更改,那么从数据库中获取项目可能是一个好主意,但是我们肯定要缓存它们,因此DB不会在每个页面渲染时都受到影响。
回答
ASP.NET Sitemap功能是为此目的而构建的,并且在许多情况下都可以很好地工作。如果我们希望菜单与站点地图看起来有所不同,则可以采用以下解决方法。
如果我们具有动态站点结构,则可以创建自定义站点地图提供程序。我们可能会遇到麻烦,但其价值不菲,但总的来说,从站点地图填充菜单会为我们提供一些不错的功能,例如安全修整,其中菜单选项适合登录用户。
回答
这完全取决于网站的工作方式。我与大多数人都同意,站点地图通常是最好的方法。但是,如果我们使用的是CMS,则可能需要将其保留在数据库中。如果我们有一个以分类法为中心的站点,请使用分类法来构建菜单。没有"最佳方法"进行导航,只有针对特定情况的最佳方法。
回答
我们有一个类似的功能。
应用程序菜单是从数据库加载到母版页上的,因为可见的菜单选项取决于用户的权限。
数据库上的几个约定和巧妙的结构确保了菜单加载代码是通用的,并在选择了某个菜单选项后自动导航到正确的屏幕。我们使用UIP导航,使用ComponentArt进行Web控件。
顺便说一句ComponentArt很烂。再说一次,我想所有第三方控件库都可以。
回答
我已经使用ASP.NET登录控件和表单身份验证为ASP.NET Web应用程序的成员资格/凭据创建了一个站点。我正在使用站点地图进行站点导航。
我有使用SiteMapDataSource填充的ASP.NET TreeView和Menu导航控件。但是非管理员用户可以看到仅限管理员使用的页面。
- 我创建了一个web.sitemap网站地图文件。而且我使用了ASP.NET网站管理工具来设置访问规则。
- 我在.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
回答
从用户的角度来看,有效访问是一项主要功能。
通用的提示方法是
字典查询,
也非常适合大型和嵌套菜单结构。
用户可以通过单击或者唯一的按键进行导航,此外,箭头键可以像往常一样向上(向下)前进(向右)或者向后(左)前进。我建议在请求时填充菜单中的初始菜单之外的菜单,并在每次选择最后一个元素时提供javascript操作。