开发asp.net自定义控件(asp.net学习笔记五)

///

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="\&quot;expandMenu(null,'menu&quot;+current+&quot;',getPos(this,'Left'),getPos(this,'Top')+this.offsetHeight);\&quot;">\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  &amp;&amp;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="\&quot;window.location='&quot;+ItemURLString+&quot;'\&quot;" onmouseover="\&quot;expandMenu('menu&quot;+current+&quot;');\&quot;" 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属性即可。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus