TaskMenu 3.0是一款很酷的Web菜單,如果能實現動態載入,那就完美了.
菜單的動態載入,不外兩種方式:前台載入和後台載入.
本文從後台載入,產生前台所需要的指令碼,再用ClientScript.RegisterStartupScript輸出
源碼檔案下載: http://download.csdn.net/source/2640547
說明:要使用TaskMenu 3.0,首先必須將TaskMenu 3.0完整地複製到項目中.
和代碼見下:
TaskMenu.cs代碼
if (!this.IsPostBack)<br /> {<br /> StringBuilder sb = new StringBuilder(1024);<br /> StringBuilder fn = new StringBuilder(1024);</p><p> sb.Append("<mce:script language =/"javascript/"><!--<br />/r/n");<br /> if (this.Session["curUser"] == null)<br /> {<br /> sb.Append("var taskMenu0;/r/n");<br /> sb.Append("var taskMenu0_subItem0;/r/n");</p><p> fn.Append("window.onload = function(){/r/n");<br /> fn.Append(" TaskMenu.setHeadMenuSpecial(true);/r/n");<br /> fn.Append(" taskMenu0 = new TaskMenu(/"控制台/");/r/n");<br /> fn.Append(" taskMenu0_subItem0 = new TaskMenuItem(/"登入系統/",/"../Images/Share/STSICON.GIF/",/"window.showModalDialog('../WebMain/WebLogin.aspx?refresh='+Math.random(),'DlgArgs','scroll:no;resizable:no;help:no;status:no;dialogWidth:646px;dialogHeight:338px');/");/r/n");<br /> fn.Append(" taskMenu0.add(taskMenu0_subItem0);/r/n");<br /> fn.Append(" taskMenu0.init();/r/n");<br /> }<br /> else<br /> {<br /> int grpSeq = 0;<br /> int meuSeq = 0;<br /> string menuGroup = "";</p><p> sb.Append("var taskMenu0;/r/n");<br /> sb.Append("var taskMenu0_subItem0;/r/n");<br /> sb.Append("var taskMenu0_subItem1;/r/n");<br /> sb.Append("var taskMenu0_subItem2;/r/n");<br /> sb.Append("var taskMenu0_subItem3;/r/n");</p><p> fn.Append("window.onload = function(){/r/n");<br /> fn.Append(" TaskMenu.setHeadMenuSpecial(true);/r/n/r/n");<br /> fn.Append(" taskMenu0 = new TaskMenu(/"控制台/");/r/n");<br /> fn.Append(" taskMenu0_subItem0 = new TaskMenuItem(/"登入系統/",/"../Images/Share/STSICON.GIF/",/"window.showModalDialog('../WebMain/WebLogin.aspx?refresh='+Math.random(),'DlgArgs','scroll:no;resizable:no;help:no;status:no;dialogWidth:646px;dialogHeight:338px');/");/r/n");<br /> fn.Append(" taskMenu0.add(taskMenu0_subItem0);/r/n");<br /> fn.Append(" taskMenu0_subItem1 = new TaskMenuItem(/"退出系統/",/"../Images/Toolbar/Cancel_t.GIF/",/"window.open('../WebMain/WebLogoff.aspx?refresh='+Math.random(), 'WebMain');/");/r/n");<br /> fn.Append(" taskMenu0.add(taskMenu0_subItem1);/r/n");<br /> fn.Append(" taskMenu0_subItem2 = new TaskMenuItem(/"修改密碼/",/"../Images/Toolbar/GetForm_t.GIF/",/"window.showModalDialog('../WebMain/WebPwdChange.aspx?refresh='+Math.random(),'DlgArgs','scroll:no;resizable:no;help:no;status:no;dialogWidth:318px;dialogHeight:280px');/");/r/n");<br /> fn.Append(" taskMenu0.add(taskMenu0_subItem2);/r/n");<br /> fn.Append(" taskMenu0_subItem3 = new TaskMenuItem(/"啟用樹形菜單/",/"../Images/Share/Issue.GIF/",/"window.open('../WebMain/WebMenu.aspx?refresh='+Math.random(), 'WebMenu');window.open('../ZL_Public/ZL_WarmPrompt.aspx?refresh='+Math.random(), 'WebMain');/");/r/n");<br /> fn.Append(" taskMenu0.add(taskMenu0_subItem3);/r/n");<br /> fn.Append(" taskMenu0_subItem4 = new TaskMenuItem(/"溫馨提示/",/"../Images/Help_t.GIF/",/"window.open('../ZL_Public/ZL_WarmPrompt.aspx?refresh='+Math.random(), 'WebMain');/");/r/n");<br /> fn.Append(" taskMenu0.add(taskMenu0_subItem4);/r/n");<br /> //fn.Append(" taskMenu0.init();/r/n/r/n");</p><p> Users usr = new Users(this.Session["curUser"].ToString());<br /> DataTable dt = usr.Roles.GetAppList("WebApp"); //SELECT [AppName], MenuGroup, MenuText, URL<br /> for (int i = 0; i < dt.Rows.Count; i++)<br /> {<br /> if (menuGroup != dt.Rows[i][0].ToString())<br /> {<br /> menuGroup = dt.Rows[i][0].ToString();<br /> fn.AppendFormat(" taskMenu{0}.init();/r/n/r/n", grpSeq);</p><p> grpSeq++;<br /> meuSeq = 0;</p><p> sb.AppendFormat("var taskMenu{0};/r/n",grpSeq);<br /> sb.AppendFormat("var taskMenu{0}_subItem0;/r/n", grpSeq);</p><p> fn.AppendFormat(" taskMenu{0} = new TaskMenu(/"{1}/");/r/n", grpSeq, dt.Rows[i][1].ToString());<br /> fn.AppendFormat(" taskMenu{0}_subItem{1} = new TaskMenuItem(/"{2}/",/"../Images/Tree/Leaf16.gif/",/"window.open('../{3}?refresh='+Math.random(), 'WebMain');/");/r/n", grpSeq, meuSeq, dt.Rows[i][2].ToString(), dt.Rows[i][3].ToString());<br /> fn.AppendFormat(" taskMenu{0}.add(taskMenu{0}_subItem{1});/r/n", grpSeq, meuSeq);<br /> }<br /> else<br /> {<br /> meuSeq++;<br /> sb.AppendFormat("var taskMenu{0}_subItem{1};/r/n", grpSeq, meuSeq);</p><p> fn.AppendFormat(" taskMenu{0}_subItem{1} = new TaskMenuItem(/"{2}/",/"../Images/Tree/Leaf16.gif/",/"window.open('../{3}?refresh='+Math.random(), 'WebMain');/");/r/n", grpSeq, meuSeq, dt.Rows[i][2].ToString(), dt.Rows[i][3].ToString());<br /> fn.AppendFormat(" taskMenu{0}.add(taskMenu{0}_subItem{1});/r/n", grpSeq, meuSeq);<br /> }<br /> }<br /> fn.AppendFormat(" taskMenu{0}.init();/r/n/r/n", grpSeq);<br /> }<br /> sb.Append("TaskMenu.setStyle(/"../TaskMenu3.0/Blue/blueStyle.css/");/r/n/r/n ");<br /> fn.Append("}/r/n<br />// --></mce:script>/r/n");</p><p> this.ClientScript.RegisterStartupScript(typeof(string), "TaskMenuScript", sb.ToString() + fn.ToString());<br /> }
TaskMenu.aspx代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TaskMenu.aspx.cs" Inherits="TaskMenu" %></p><p><%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">--%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"></p><p><html xmlns="http://www.w3.org/1999/xhtml" ><br /><head runat="server"><br /> <title>XP Style Menu</title><br /> <mce:script src="../TaskMenu3.0/TaskMenu.js" mce_src="TaskMenu3.0/TaskMenu.js"></mce:script></p><p></head><br /><body><br /> <form id="form1" runat="server"></p><p> </form><br /></body><br /></html>
哈哈,稍作修改,即可實現Treeview菜單和TaskMenu之間的相互切換,真爽.見