如何实现的动态可拆装的网页菜单 我今天看了一个印刷厂的内部网站,这个网站的菜单是动态的,就是把菜单名和子菜单名都装在数据库里的一个表中,子菜单就代表着一个网页,如果要加入新的页面,只需要将这个页面的地址写进数据库的子菜单项就可以了,请问这如何实现的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class HierarchicalMenu : System.Web.UI.UserControl { private Cuyahoga.Web.UI.PageEngine _page; protected System.Web.UI.WebControls.PlaceHolder plhNodes; private void Page_Load(object sender, System.EventArgs e) { if (this.Page is PageEngine) { this._page = (PageEngine)this.Page; BuildNavigationTree(); } } private void BuildNavigationTree() { HtmlGenericControl mainList = new HtmlGenericControl("ul"); mainList.Controls.Add(BuildListItemFromNode(this._page.RootNode)); foreach (Node node in this._page.RootNode.ChildNodes) { if (node.ShowInNavigation && node.ViewAllowed(this._page.CuyahogaUser)) { HtmlControl listItem = BuildListItemFromNode(node); if (node.Level <= this._page.ActiveNode.Level && node.Id == this._page.ActiveNode.Trail[node.Level] && node.ChildNodes.Count > 0) { listItem.Controls.Add(BuildListFromNodes(node.ChildNodes)); } mainList.Controls.Add(listItem); } } if (this._page.CuyahogaUser != null && this._page.CuyahogaUser.HasPermission(AccessLevel.Administrator)) { HtmlGenericControl listItem = new HtmlGenericControl("li"); HyperLink hpl = new HyperLink(); hpl.NavigateUrl = this._page.ResolveUrl("~/Admin"); hpl.Text = "Admin"; listItem.Controls.Add(hpl); mainList.Controls.Add(listItem); } this.plhNodes.Controls.Add(mainList); } private HtmlControl BuildListItemFromNode(Node node) { HtmlGenericControl listItem = new HtmlGenericControl("li"); HyperLink hpl = new HyperLink(); hpl.NavigateUrl = UrlHelper.GetUrlFromNode(node); UrlHelper.SetHyperLinkTarget(hpl, node); hpl.Text = node.Title; // Little dirty trick to highlight the active item :) if (node.Id == this._page.ActiveNode.Id) { hpl.CssClass = "selected"; } listItem.Controls.Add(hpl); return listItem; } private HtmlControl BuildListFromNodes(IList nodes) { HtmlGenericControl list = new HtmlGenericControl("ul"); foreach (Node node in nodes) { if (node.ViewAllowed(this._page.CuyahogaUser)) { HtmlControl listItem = BuildListItemFromNode(node); if (node.Level <= this._page.ActiveNode.Level && node.Id == this._page.ActiveNode.Trail[node.Level] && node.ChildNodes.Count > 0) { listItem.Controls.Add(BuildListFromNodes(node.ChildNodes)); } list.Controls.Add(listItem); } } return list; }一个CMS系统的动态菜单 求帮助 救命!UDP通讯问题,Server发送数据,Client无法接收!!! 索引超出了数组的范围 关于C#的命名空间,谢谢! 查询语句的问题 寻!记录可以树形显示的GRIDVIEW 在线急等!DateTime.Now.ToString问题!!!!谢谢! 一个关于释放SqlConnection释放的问题 着急!嵌入的资源读取失败,错误:“null”不是“stream”的有效值 怎么用C#在WEB页面实现菜单的功能,来着有分!!放血 如何给VC#做出来的可执行文件(.exe的)换图标 关于CheckBoxList的问题
{
private Cuyahoga.Web.UI.PageEngine _page;
protected System.Web.UI.WebControls.PlaceHolder plhNodes; private void Page_Load(object sender, System.EventArgs e)
{
if (this.Page is PageEngine)
{
this._page = (PageEngine)this.Page;
BuildNavigationTree();
}
} private void BuildNavigationTree()
{
HtmlGenericControl mainList = new HtmlGenericControl("ul");
mainList.Controls.Add(BuildListItemFromNode(this._page.RootNode));
foreach (Node node in this._page.RootNode.ChildNodes)
{
if (node.ShowInNavigation && node.ViewAllowed(this._page.CuyahogaUser))
{
HtmlControl listItem = BuildListItemFromNode(node);
if (node.Level <= this._page.ActiveNode.Level
&& node.Id == this._page.ActiveNode.Trail[node.Level]
&& node.ChildNodes.Count > 0)
{
listItem.Controls.Add(BuildListFromNodes(node.ChildNodes));
}
mainList.Controls.Add(listItem);
}
}
if (this._page.CuyahogaUser != null
&& this._page.CuyahogaUser.HasPermission(AccessLevel.Administrator))
{
HtmlGenericControl listItem = new HtmlGenericControl("li");
HyperLink hpl = new HyperLink();
hpl.NavigateUrl = this._page.ResolveUrl("~/Admin");
hpl.Text = "Admin";
listItem.Controls.Add(hpl);
mainList.Controls.Add(listItem);
}
this.plhNodes.Controls.Add(mainList);
} private HtmlControl BuildListItemFromNode(Node node)
{
HtmlGenericControl listItem = new HtmlGenericControl("li");
HyperLink hpl = new HyperLink();
hpl.NavigateUrl = UrlHelper.GetUrlFromNode(node);
UrlHelper.SetHyperLinkTarget(hpl, node);
hpl.Text = node.Title;
// Little dirty trick to highlight the active item :)
if (node.Id == this._page.ActiveNode.Id)
{
hpl.CssClass = "selected";
}
listItem.Controls.Add(hpl);
return listItem;
} private HtmlControl BuildListFromNodes(IList nodes)
{
HtmlGenericControl list = new HtmlGenericControl("ul");
foreach (Node node in nodes)
{
if (node.ViewAllowed(this._page.CuyahogaUser))
{
HtmlControl listItem = BuildListItemFromNode(node);
if (node.Level <= this._page.ActiveNode.Level
&& node.Id == this._page.ActiveNode.Trail[node.Level]
&& node.ChildNodes.Count > 0)
{
listItem.Controls.Add(BuildListFromNodes(node.ChildNodes));
}
list.Controls.Add(listItem);
}
}
return list;
}
一个CMS系统的动态菜单