首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题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)    

积极原创作者 
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
coofucoo (105)
Drate (69)
lphpc (30)
CSDN - 文档中心 - .NET 阅读:12297   评论: 2    参与评论
标题   开发asp.net自定义控件(asp.net学习笔记三)     选择自 cashcho 的 Blog
关键字   asp.net 自定义控件 Custom Control
出处  

 

By Cash

2003.4.25

 

上一章我们写了一个最简单的自定义控件,此次让我们抛开理论,实际开发一个具有实用意义的自定义控件:一个可以设置权限的菜单。

在这个项目中我们将不采用任何未学到的理论知识,用户只需要具有基本的DHTML知识就可以。如你所知,服务器控件不过是对一些HTMLJavascript的封装罢了。至于其它的技巧,将来我们会逐渐提及并应用,最终生产出具有商业水准的控件来。

制作这个控件的思路很简单:首先使用DHTML写出一个菜单来,然后把其中的属性提取出来,接着封装起脚本与HTML显示代码,最后将其作为参数重写Render方法。你看,就这么简单。

如果不想透过浏览器阅读代码(那实在很讨厌),你可以到如下地址下载这个项目的源码,其中包括这个自定义控件的源代码及各类测试文件:不同的数据源以及权限设定。

http://user1.7host.com/cashtsao//CashMenu0110.zip

 

首先在名称空间CashControls中声明一个枚举类型MainMenuAlign

public enum MainMenuAlign

    {

        /// <summary>

        ///

        /// </summary>

        left=0,

        /// <summary>

        /// 中间

        /// </summary>

        center=1,

        /// <summary>

        ///

        /// </summary>

        right=2

    }

接着声明继承自WebControls的CashMenu,声明如下变量及属性:

变量:

private System.Web.HttpContext contextObject;

        private System.Xml.XmlDocument oXmlDoc=new XmlDocument();

        private string menuData;

        private MainMenuAlign mainMenuAlign=MainMenuAlign.center;

        private string ruleString="admin";

        private int cellspacing;

        private int mainMenuHeight;

属性:

/// <summary>

        /// 属性MenuData用于指定数据源,可以是某个XML文件,

///也可以是XML格式之字符串

        /// </summary>

        [Bindable(true),

        Category("Data"),Description("为Menu提供XML数据源.")]

        public string MenuData

        {

            get

            {

                return menuData;

            }

 

            set

            {

                menuData = value;

                Build();

            }

        }

 

......

 

声明辅助方法:

/// <summary>

        /// 方法Build用于绑写数据源,将其绑定到Context上,在属性MenuData中调用

        /// </summary>

        private void Build()

        {

            if (menuData!=null)

                try

                {

                    contextObject = this.Context;

                    if (contextObject!=null)

                        oXmlDoc.Load(contextObject.Server.MapPath(menuData));

                }

                catch

                {

                    try

                    {

                        oXmlDoc.LoadXml(menuData);

                    }

                    catch (Exception e)

                    {

                        contextObject.Response.Write("打开数据源失败!<BR>");

                        contextObject.Response.Write(e.Message);

                    }

                }

            return;

        }

        /// <summary>

        /// 方法GenerateHtml用于生成Html代码,调用TraverseMenuTree方法,传递Context中oXmlDoc的一个节点进去

        /// </summary>

        /// <returns></returns>

        private string GenerateHtml()

        {

            string tempHtml = "";

            if (oXmlDoc.ChildNodes.Count !=0) 

            {

                try

                {

                    tempHtml = tempHtml + TraverseMenuTree(oXmlDoc.ChildNodes.Item(1).FirstChild);

                }

                catch

                {

                    throw new ArgumentException("发生错误."); 

                }

            }

            return(tempHtml);

           

        }

相关文章
对该文的评论
CSDN 网友 ( 2005-02-16)
为什么在设计界面看不到自定义的属性?
CSDN 网友 ( 2004-07-08)
ykjhkjh