解决办法:通根据数据库依据菜单标识查询出一级菜单及其子菜单,在页面添加一个Menu控件,
最后为Menu控件赋值解决办法(红色代码为为菜单添加单击事件的代码):
界面代码:
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal"
DynamicEnableDefaultPopOutImage="False" StaticEnableDefaultPopOutImage="false"
DenamicEnableDefaultPopOutImage="false" DynamicVerticalOffset ="10" Height="20px"
<span style="color:#ff0000;">OnMenuItemClick="Menu1_MenuItemClick"</span> Width="100%">
</asp:Menu>
界面逻辑代码:
private void LoadMenu()
{
DataTable table = new LoadMenu().GetRootMenu();
for (int i = 0; i < table.Rows.Count; i++)
{
MenuItem menuRootNode = new MenuItem();
<span style="white-space:pre"> <span style="color:#ff0000;">Menu1.MenuItemClick +=Menu1_MenuItemClick;</span></span>
menuRootNode.Text = table.Rows[i]["MenuName"].ToString();
menuRootNode.Value = table.Rows[i]["MenuID"].ToString();
string rootImagePath = table.Rows[i]["MenuIcon"].ToString();
if (!(string.IsNullOrEmpty(rootImagePath)))
{
menuRootNode.ImageUrl = rootImagePath;
}
DataTable table1 = new LoadMenu().GetChildMenu(Convert.ToInt32(menuRootNode.Value));
for (int j = 0; j < table1.Rows.Count; j++)
{
MenuItem menuChildNode = new MenuItem();
menuChildNode.Text = table1.Rows[j]["MenuName"].ToString();
menuChildNode.Value = table1.Rows[j]["MenuID"].ToString();
string childImagePath = table1.Rows[j]["MenuIcon"].ToString();
if (!(string.IsNullOrEmpty(childImagePath)))
{
menuChildNode.ImageUrl = childImagePath;
}
menuChildNode.Enabled = true;
menuRootNode.ChildItems.Add(menuChildNode);
}
menuRootNode.Enabled = true;
Menu1.Items.Add(menuRootNode);
}
}
<span style="color:#ff0000;">protected void Menu1_MenuItemClick(Object sender,
System.Web.UI.WebControls.MenuEventArgs e)
{
switch (e.Item.Text.ToLower())
{
case "task":
Console.WriteLine(e.Item.NavigateUrl);
return;
case "system":
Console.WriteLine(e.Item.NavigateUrl);
return;
case "user":
Console.WriteLine(e.Item.NavigateUrl);
return;
}
}</span>
后台
逻辑代码:
<span style="color:#333333;">public class LoadMenu
{
/// <summary>
/// Get the root menu. Add by lqf 2014/06/04
/// </summary>
/// <returns></returns>
public DataTable GetRootMenu() {
StringBuilder str = new StringBuilder();
str.Append("select * from Menu where ParentMenuID = 0 order by MenuOrder");
DataTable table = DataFactory.SqlDataBase().GetDataTableBySQL(str);
if(table.Rows.Count <= 0){
throw new Exception("Error:Menu item load failure!");
}
return table;
}
/// <summary>
/// Get the child menu. Add by lqf 2014/06/04
/// </summary>
/// <param name="parentMenuId"></param>
/// <returns></returns>
public DataTable GetChildMenu(int parentMenuId) {
StringBuilder str = new StringBuilder();
str.Append("select * from Menu where ParentMenuID = @ParentMenuID");
SqlParam[] param = { new SqlParam("@ParentMenuID", parentMenuId) };
return DataFactory.SqlDataBase().GetDataTableBySQL(str, param);
}
}</span>