///
1<summary>
2
3/// 方法GenerateGetPosScript用于生成一段Javascript代码,其作用是为菜单定位
4
5/// </summary>
///
1<returns></returns>
private string GenerateGetPosScript()
{
string getPosScript;
getPosScript = "
1<script language='\"JavaScript\"'>\n";
2
3getPosScript = getPosScript + "function getPos(el,sProp) {\n";
4
5getPosScript = getPosScript + "\tvar iPos = 0\n";
6
7getPosScript = getPosScript + "\tel = el.offsetParent;\n";
8
9getPosScript = getPosScript + "\twhile (el!=null) {\n";
10
11getPosScript = getPosScript + "\t\tiPos+=el[\"offset\" + sProp]\n";
12
13getPosScript = getPosScript + "\t\tel = el.offsetParent\n}\n\treturn iPos;}\n";
14
15getPosScript = getPosScript + "</script>
\n";
return (getPosScript);
}
///
1<summary>
2
3/// 方法TraverseMenuTree用于解析XML文件并生成HTML代码
4
5/// </summary>
///
1<param name="node"/>
欲开始解析的节点
///
1<returns></returns>
private string TraverseMenuTree(System.Xml.XmlNode node)
{
string s = "";
string rightCode;
string [] Rule = RuleString.Split(',');
if (node!= null &&node.HasChildNodes)
{
s = s + "
1<table border='\"0\"' cellpadding='\"0\"' cellspacing="+cellspacing.ToString()+" class='\"a\"' width='\"100%\"'>";
2
3s = s + "<tr align="+mainMenuAlign+" class='\"mainmenu\"' valign='\"middle\"'>";
4
5for ( int current=0; current<node.childnodes.count; "<td="" +="" current++)="" height="+mainMenuHeight.ToString()+" menulabelstring='node.ChildNodes.Item(current).Attributes["Label"].Value;' s="s" string="" {=""><a class='\"a\"' href='\"#;\"' onmouseover="\"expandMenu(null,'menu"+current+"',getPos(this,'Left'),getPos(this,'Top')+this.offsetHeight);\"">\n\t\t"+MenuLabelString+"</a>\n";
6
7s = s + "<div class='\"menu\"' id='\"menu"+current+"\"' onmouseout='\"hideMe();\"'>";
8
9if (node.ChildNodes.Item(current).FirstChild!= null &&node.ChildNodes.Item(current).FirstChild.HasChildNodes)
10
11{
12
13for ( int i=0;i<node.childnodes.item(current).firstchild.childnodes.count;i++) !="null" "\n\t\t<a="" (="" (node.childnodes.item(current).firstchild.childnodes.item(i).attributes["rightcode"]="" (node.childnodes.item(current).firstchild.childnodes.item(i).attributes["url"]="" (rule="rightCode" )="" +="" ;="" else="" foreach="" href='\"#;\"' if="" in="" itemlabelstring='node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["Label"].Value;' itemurlstring='node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["URL"].Value;' onclick="\"window.location='"+ItemURLString+"'\"" onmouseover="\"expandMenu('menu"+current+"');\"" rightcode="" rule="" rule)="" rulestring="admin" s="s" string="" {="" ||="" }="">";
14
15s = s + "\n\t\t"+ItemLabelString+"<br/>";
16
17}
18
19}
20
21}
22
23s = s + "</node.childnodes.item(current).firstchild.childnodes.count;i++)></div>";
24
25}
26
27}
28
29s = s + "</node.childnodes.count;></tr>";
30
31}
32
33s = s + "</table>
\n\n";
s = s + "
1<p class='\"a\"'></p>
\n";
return s;
}
重写方法:
///
1<summary>
2
3/// 重写OnInit方法,初始化条件
4
5/// </summary>
///
1<param name="e"/>
protected override void OnInit(System.EventArgs e)
{
base .OnInit(e);
return ;
}
///
1<summary>
2
3/// 将此控件呈现给指定的输出参数。
4
5/// </summary>
///
1<param name="output"/>
要写出到的 HTML 编写器
protected override void Render(HtmlTextWriter output)
{
output.Write(GenerateScript());
output.Write(GenerateHtml());
output.Write(GenerateGetPosScript());
}
XML格式如下:
1<menudata imagesbaseurl="Menuimages/">
2<menugroup>
3<menuitem label="文件"/>
4<menugroup expandoffsetx="-1" expandoffsety="1">
5<menuitem label="新建" rightcode="vd_ba" url="i_New.htm">
6<menuitem label="保存" rightcode="vd_ba"/>
7</menuitem></menugroup>
8
9</menugroup>
10</menudata>
如前所述,这个 Menu支持权限设置,只要设置它的RuleString属性即可。