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

原创 2003年05月08日 13:44:00

/// <summary><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

        /// 方法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属性即可。

 

创建ASP.Net自定义控件

   自定义服务器控件完全由开发人员自行设计开发,开发人员可自定义UI、功能、属性、方法、事件等特征,常见的自定义服务器控件分为4种:复合控件、验证控件、模板控件和数据绑定控件。(1)复合控件:该类控...
  • friend_yutian
  • friend_yutian
  • 2006年12月30日 15:34
  • 21962

ASP.NET自定义控件组件开发 第一章:从一个简单的控件谈起

起始开发ASP.NET自定义控件不是那么的高深,当初我开始学的时候还有点恐惧,但是慢慢就好了。学习控件的开发技术,并不一定说以后要从事控件的开发,而是让我们深入的理解掌握ASP.NET内部的机理。你会...
  • quan_QQ
  • quan_QQ
  • 2017年03月07日 23:21
  • 1100

asp.net WebForm之用户自定义控件

关于用户自定义控件,想必大家已经非常熟悉了。虽然说经常用过,但是只是简单的使用而已。在这里再次总结一下Asp.net中的UserControl,以便下次使用时 能够得心应手。本文将会介绍以下内容...
  • ydm19891101
  • ydm19891101
  • 2016年05月11日 09:45
  • 2885

强大的ASP.NET控件----用户控件对战自定义控件

用户控件,用户控件的属性 自定义控件,如何使用自定义和用户控件,如何制作自定义控件和用户控件...
  • u010073895
  • u010073895
  • 2014年11月08日 21:34
  • 2761

Asp.net 用户控件添加自定义事件asp.net

Asp.net 用户控件添加自定义事件asp.net
  • Sunqlive
  • Sunqlive
  • 2016年09月07日 11:17
  • 941

为ASP.NET WEB自定义控件添加提交事件

为ASP.NET WEB自定义控件添加提交事件顾庆岗 prettywolf@vip.sina.com在Visual Studio.Net提供的服务端控件中有一个叫做“LinkButton”的,它看上去...
  • jokuldamao
  • jokuldamao
  • 2004年11月30日 19:42
  • 1310

asp.net 自定义控件(2种方法)

一、在类中写自定义控件 自定义DropDownList: 1,首先创建一个cs类文件Controls(采用工厂模式) using System.Collections.Generic; using S...
  • anihasiyou
  • anihasiyou
  • 2013年01月16日 10:57
  • 1847

asp.net向自定义控件传递参数-两个例子

在控件.ascx.cs声明控件属性           private int _ClassID = 0;           public int ClassID           {  ...
  • lishimin1012
  • lishimin1012
  • 2014年06月27日 21:14
  • 4920

ASP.NET学习笔记

ASP.NET学习笔记(1) 1.ASP.NET需要学习的内容.     一般处理程序HttpHandler     模板引擎     WebForm(aspx)     ASP.NET MVC   ...
  • gyming
  • gyming
  • 2014年03月26日 10:42
  • 1117

asp.net4.0网站开发与项目实战—学习笔记1

asp.net4.0网站开发与项目实战,以前一直作为工具书使用,只翻看需要的章节内容,在开发了两个Web应用程序之后,再回来完整的阅读此书,查看以前忽略的内容,特别相关的概念。 本次学习内容.net框...
  • longhill
  • longhill
  • 2017年07月30日 12:02
  • 393
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发asp.net自定义控件(asp.net学习笔记五)
举报原因:
原因补充:

(最多只允许输入30个字)