首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
coofucoo (105)
Drate (69)
lphpc (30)
smallnest (61)
iiprogram (64)
downmoon (32)
danny_xcz (49)
btbtd (81)
qingrun (66)
tyrone1979 (21)
CSDN - 文档中心 - .NET 阅读:11013   评论: 5    参与评论
标题   开发asp.net自定义控件(asp.net学习笔记五)     选择自 cashcho 的 Blog
关键字   asp.net 自定义控件 Custom Control
出处  

/// <summary>

        /// 方法GenerateGetPosScript用于生成一段Javascript代码,其作用是为菜单定位

        /// </summary>

        /// <returns></returns>

        private string GenerateGetPosScript()

        {

            string getPosScript;

            getPosScript = "<script language=\"JavaScript\">\n";

            getPosScript = getPosScript + "function getPos(el,sProp) {\n";

            getPosScript = getPosScript + "\tvar iPos = 0\n";

            getPosScript = getPosScript + "\tel = el.offsetParent;\n";

            getPosScript = getPosScript + "\twhile (el!=null) {\n";

            getPosScript = getPosScript + "\t\tiPos+=el[\"offset\" + sProp]\n";

            getPosScript = getPosScript + "\t\tel = el.offsetParent\n}\n\treturn iPos;}\n";

            getPosScript = getPosScript + "</script>\n";

            return(getPosScript);

 

        }

        /// <summary>

        /// 方法TraverseMenuTree用于解析XML文件并生成HTML代码

        /// </summary>

        /// <param name="node">欲开始解析的节点</param>

        /// <returns></returns>

        private string TraverseMenuTree(System.Xml.XmlNode node)

        {

            string s = "";

            string rightCode;

            string[] Rule = RuleString.Split(',');

            if(node!=null&&node.HasChildNodes)

            {

                s = s + "<table border=\"0\" cellpadding=\"0\" cellspacing="+cellspacing.ToString()+"  width=\"100%\" class=\"a\">";

                s = s + "<tr align="+mainMenuAlign+" valign=\"middle\" class=\"mainmenu\">";

                for(int current=0; current<node.ChildNodes.Count; current++)

                {

                    string MenuLabelString = node.ChildNodes.Item(current).Attributes["Label"].Value;

                    s = s + "<td height="+mainMenuHeight.ToString()+" ><a href=\"#;\" onMouseOver=\"expandMenu(null,'menu"+current+"',getPos(this,'Left'),getPos(this,'Top')+this.offsetHeight);\" class=\"a\">\n\t\t"+MenuLabelString+"</a></td>\n";

                    s = s + "<div id=\"menu"+current+"\" class=\"menu\" onMouseOut=\"hideMe();\">";

                    if(node.ChildNodes.Item(current).FirstChild!=null&&node.ChildNodes.Item(current).FirstChild.HasChildNodes)

                    {

                        for(int i=0;i<node.ChildNodes.Item(current).FirstChild.ChildNodes.Count;i++)

                        {

                            string ItemLabelString = node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["Label"].Value;

                            string ItemURLString="";

                            if(node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["URL"] != null)

                            {

                                ItemURLString = node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["URL"].Value;

                            }

                            if(node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["RightCode"] != null)

                            {

                                rightCode = node.ChildNodes.Item(current).FirstChild.ChildNodes.Item(i).Attributes["RightCode"].Value;

                            }

                            else

                            {

                                rightCode = "";

                            }

                            foreach(string rule in Rule)

                            {

                                if(rule==rightCode || ruleString=="admin")

                                {

                                    s = s + "\n\t\t<a href=\"#;\" onMouseOver=\"expandMenu('menu"+current+"');\"  onclick=\"window.location='"+ItemURLString+"'\">";

                                    s = s + "\n\t\t"+ItemLabelString+"</a><br>";

                                }

                            }

                        }

                        s = s + "</div>";

                    }

                }

                s = s + "</tr>";

            }

            s = s + "</tr></table>\n\n";

            s = s + "<p class=\"a\"></p>\n";

            return s;

        }

重写方法:

/// <summary>

        /// 重写OnInit方法,初始化条件

        /// </summary>

        /// <param name="e"></param>

        protected override void OnInit(System.EventArgs e)

        {

            base.OnInit(e);

            return;

        }

        /// <summary>

        /// 将此控件呈现给指定的输出参数。

        /// </summary>

        /// <param name="output"> 要写出到的 HTML 编写器 </param>

        protected override void Render(HtmlTextWriter output)

        {

            output.Write(GenerateScript());

            output.Write(GenerateHtml());

            output.Write(GenerateGetPosScript());

        }

 

XML格式如下:

<?xml version="1.0" encoding="UTF-8"?>

<MenuData ImagesBaseURL="Menuimages/">

  <MenuGroup>

    <MenuItem Label="文件">

      <MenuGroup ExpandOffsetY="1" ExpandOffsetX="-1">

        <MenuItem Label="新建" URL="i_New.htm" RightCode="vd_ba"/>

        <MenuItem Label="保存" RightCode="vd_ba"/>

      </MenuGroup>

    </MenuItem>

  </MenuGroup>

</MenuData>

 

如前所述,这个Menu支持权限设置,只要设置它的RuleString属性即可。

 


相关文章
对该文的评论
yangh44 ( 2004-11-02)
也许。。。。。。
CSDN 网友 ( 2004-07-15)
这个例子对初学者有点意思吧,但是还没有介绍设计时的属性,绑定的自定义控件啊等等
iewgnez ( 2004-05-07)
请教一下,在.net环境中对数据表进行添加,删除应该怎么做啊
swdinoho ( 2004-02-18)
看起来还挺难的!
向cashcho学习!
cooaa ( 2004-01-17)
好像全是表面的东西,
有没有自己对WebContral的内部原理及机制或产生过程及http对他的处理机制的文章。