2009-08-01 134 views
2

我需要从数据库(具有n级子类别的类别)填充具有可以不断更改的菜单项的分层结构的ASP.NET菜单控件。从数据库中填充菜单

有一些方法,我想听听哪一个是最有效的。

我有那些记:

  1. 检索的数据库中的数据并将其转换为xml然后用定制的XSLT文件转换,并将其绑定到菜单控制
  2. 检索的数据库中的数据,并同时通过循环(递归),将菜单项和子项插入菜单控件
  3. SQL网站地图提供程序(感谢Made4Print)
  4. 还有其他的东西吗?

回答

3

ASP.NET菜单控件可以通过SiteMapDataSource使用.SiteMap文件。

你可以实现你自己的SiteMapProvider,这样你可以在你的数据库中拥有你的SiteMap层次结构,并且连接相同的组件,从而使事物更加灵活。

下面是一个例子:http://weblogs.asp.net/scottgu/archive/2006/01/11/435108.aspx

HTH

1

如果你想这样做,我肯定会推荐选项2,因为它包含一个小于选项1的转换级别。如果你已经遍历菜单项和他们的hiearchies,你也可以建立菜单项和子项直接 - 我没有看到从绕过XML到XSLT进入菜单结构的巨大优势,真的。

马克

PS:选项3(SQL站点地图提供者)听起来也像是一个很好的主意,如果该站点地图结构和选项都配不上你(他们通常应该是)。我可能会先尝试这个选项,然后从那里开始。

+0

我唯一关心的是效率,菜单项可以不断地变化。 菜单项目在父母和其他人之间删除或移动(与它的孩子) 所以这将需要重建菜单结构。 – markiz 2009-08-01 12:14:47

+0

是的 - 但如果您先将已更改的结构转换为XML并将XSLT用于实际菜单结构中,那也是如此 - 我不认为您通过此路线赢得任何东西。 – 2009-08-01 21:38:27

1

我同意马克。然后,您可以将所有内容都包装在服务器控件中以实现可重用性。将所有内容转换为XML,然后使用XSLT以某种方式将它“转换”回来对我来说似乎是一种开销。