ITPUB??ì3
ITPUB论坛 » Web开发 » ASP.NET与AJAX » ASP.NET组件编程step by step


标题: ASP.NET组件编程step by step
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:44 
ASP.NET组件编程step by step

在ASP.net中做一个复合控件不是很难了,但是如果是刚刚接触的话,可能还是需要指点一下方向,所以不妨在这里啰嗦一下,高手们莫怪。

       Javascript:当今最流行的客户端脚本语言,如果要做出特效来他最有能耐。

       CSS:级联样式表,用于设置元素的样式。

       DHTML:动态HTML,和浏览器交互会用到。

       System.Web.UI.WebControls.WebControl:在ASP.NET中自定义控件的基类,我们可能会重写他的一些方法,常用的有:

       CreateChildControls():给予控件创建内定子控件的机会,预设情况OnPreRender()方法会调用此方法要求该控件创建其子控件,别一种情况则是由FindControl()方法调用。

       OnPreRender():触发PreRender事件,在绘制控件之前发生。

       Render():绘制控件。

       AddAttributesToRender():向标签中添加HTML样式或属性。

       另外,还有一个方法:EnsureChildControls(),该方法用于确定服务器控控件是否包含子控件,如果不包含,则创建子控件,在设计阶段起作用。

    其他的慢慢去看啦,这几个是我们的例子中会用到的。

  

    最终效果

    先看看效果,这样心中才有明确的目标。



          没有任何鼠标动作                      鼠标移到控件上                       鼠标移出后还原


  

1、  我们先完成效果部分,也就是编写javascript脚本。我的方法是写一个HTML文件,试验脚本的正确性:

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

<TITLE></TITLE>

  

<script language=javascript>

var OldColor;

function mouseover(ctrl,color)

{

        OldColor = ctrl.style.backgroundColor;

        ctrl.style.color = "#ffffff";

        ctrl.style.backgroundColor = color;

         

}

function mouseout(ctrl)

{

        ctrl.style.backgroundColor = OldColor;

        ctrl.style.color = "#000000";

}

</script>

</HEAD>

<BODY>

  

<table  border="0" style="font-size:9pt" onmouseover="mouseover(this,’#ff0044’)" onmouseout="mouseout(this)">

<tr >

        <td><span>姓名:</span></td><td><input name="_ctl2" type="text" /></td>

</tr>

</table>

  

</BODY>

</HTML>

新建一个文本文件,将这段代码复制过去,然后将文件的扩展名改为.html,用IE打开,是不是看到了想要的效果?


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:45 
2、  前期工作准备完成了,接下来打开VS.NET IDE,新建一个项目,选择Visual C#项目(别问我要VB.net的代码,我不会),在右边列表中选择“WEB控件库”,输入项目名称:LabelTextBox。

3、  把自动生成的代码删除,只留下一个类的框架,像下面这样(命名空间自定):

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

using System.Drawing;

  

namespace LzhTextBpx

{        

    public class LabelTextbox : System.Web.UI.WebControls.WebControl

{

}

}

  

4、  上面看到的效果其实是一个一行两列的表格,我们把表格的border属性设成0,所以看不出来了,其中左边单元格放标签,右边单元格放文本框,所以,我们要用代码生成这个表格。用到的类有:

a)         Table:表示表格

b)        TableRow:表示表格行

c)        TableCell:表示表格中的单元格

注意:一个表格可以有多个表格行,一个表格行中可以放置多个单元格

生成代码如下:

//定义一个表对象

            Table t = new Table();

            //添加一行

            TableRow tr = new TableRow();

            //添加两个单元格

            TableCell tc1 = new TableCell();

            TableCell tc2 = new TableCell();

            //将控件添加到Controls集中.

            tc1.Controls.Add(label);

            tc2.Controls.Add(textBox);

            tr.Controls.Add(tc1);

            tr.Controls.Add(tc2);

            t.Controls.Add(tr);

this.Controls.Add(t);   

我们还要响应表格的鼠标移入移出事件,背景色的变化就是在这里触发的,下面的代码完成此事:

//添加鼠标事件

        t.Attributes.Add("onmouseover","mouseover(this,’" + "#" + R + G + B + "’)";

t.Attributes.Add("onmouseout","mouseout(this)";

Attributes表示表格的属性集,Add()方法用于添加一个新的属性。

顺便把表格中的字体也设置一下:

//添加样式,用来控制字体

t.Style.Add("font-size","10pt";

看到上面的R、G、B三个变量了吗?这三个变量是某种颜色的十六进制的字符串表示。使用如下的方法对颜色进行分解:

//以下将颜色值转化成十六进制表示

        string R,G,B;

        R = (Convert.ToInt32(this._backgroundColor.R)).ToString("X";

        G = (Convert.ToInt32(this._backgroundColor.G)).ToString("X";

B = (Convert.ToInt32(this._backgroundColor.B)).ToString("X";

其中_backgroundColor是自定义属性。


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:45 
这一步的全部代码如下:

private void CreateControls()//创建控件以及设置控件的相关属性

        {

            //以下将颜色值转化成十六进制表示

            string R,G,B;

            R = (Convert.ToInt32(this._backgroundColor.R)).ToString("X";

            G = (Convert.ToInt32(this._backgroundColor.G)).ToString("X";

            B = (Convert.ToInt32(this._backgroundColor.B)).ToString("X";

            //定义一个表对象

            Table t = new Table();

  

            //添加鼠标事件

            t.Attributes.Add("onmouseover","ltmouseover(this,’" + "#" + R + G + B + "’)";

            t.Attributes.Add("onmouseout","ltmouseout(this)";

  

            //添加样式,用来控制字体

            t.Style.Add("font-size","10pt";

  

            //添加一行

            TableRow tr = new TableRow();

            //添加两个单元格

            TableCell tc1 = new TableCell();

            TableCell tc2 = new TableCell();

  

            //将控件添加到Controls集中.

            tc1.Controls.Add(label);

            tc2.Controls.Add(textBox);

            tr.Controls.Add(tc1);

            tr.Controls.Add(tc2);

  

            t.Controls.Add(tr);

  

            this.Controls.Add(t);            

        }


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:45 
5、  本控件向外提供了三个属性,backgroundColor 表示鼠标移入控件的背景颜色,labelString 为标签内文本,textString 为文本框内容。定义如下:

private Label label = new Label();//创建一个标签

        private TextBox textBox = new TextBox();//创建一个文本框

private Color _backgroundColor;//鼠标移入的背景颜色

public Color backgroundColor

        {

            get

            {

                if(_backgroundColor == Color.Empty)

                    return Color.Blue;

                return _backgroundColor;

            }

            set

            {

                _backgroundColor = value;

            }

        }

  

        public string labelString

        {

            get

            {

                return label.Text;

            }

            set

            {

                label.Text = value;

            }

        }

  

        public string textString

        {

            get

            {

                return textBox.Text;

            }

            set

            {

                textBox.Text = value;

            }

        }

  

6、  这一步需要重写 CreateChildControls() 方法,该方法会自动被调用,用来生成子控件。

protected override void CreateChildControls()

        {

            this.EnsureChildControls();//如果子控件没有创建,则创建

            base.CreateChildControls ();//调用方法

            CreateControls();

}


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:46 
7、  将第一步的脚本存到一个常量中:

private const string MOUSE_SCRIPT = //用来触发鼠标事件的脚本

            "<script language=javascript>\n" +

            "var OldColor;\n" +  

            "function ltmouseover(ctrl,color)\n" + //当鼠标移入时,调用该方法,ctrl为表格,color为要改变的颜色值

            "{\n" +

                "OldColor = ctrl.style.backgroundColor;\n" + //记录下原来的文档背景颜色

                "ctrl.style.color = ’#ffffff’;\n" +//将字体颜色改为白色

                "ctrl.style.backgroundColor = color;\n" + //更改表格背景颜色

            "}\n" +

            "function ltmouseout(ctrl)\n" + //鼠标移出时调用 ,参数同上

            "{\n" +

                "ctrl.style.backgroundColor = OldColor;\n" + //还原背景颜色

                "ctrl.style.color = ’#000000’;" + //将字体颜色还原成黑色

            "}\n" +

        "</script>\n";

  

重写OnPreRender()方法将该脚本输出到浏览器,考虑到同一页面可能会有多个该控件的情况,此时并不需要每个控件都生成一段脚本,而是所有控件共享这段脚本,所以,我们要用Page.IsClientScriptBlockRegistered()判断该脚本是否已经输出,如果输出,就不需要再次输出了。

protected override void OnPreRender(EventArgs e)

        {

            //将脚本输出到页面中.

            if(!Page.IsClientScriptBlockRegistered("mousescript") //防止重复输出.

            {

                Page.RegisterClientScriptBlock("mousescript",MOUSE_SCRIPT);

            }

            base.OnPreRender (e);

}

     

    控件的使用

    使用控件显然比创建控件简单得多,下面讲一下该控件的使用方法(适合初学者):

    将该项目编译后,会生成一个叫LabelTextbox.dll的程序集。

     

    1、创建一个测试项目,打开工具箱,点击右键,选择“添加/移除项”,


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:46 
2、弹出“自定义工具箱”,选择“.net FramWork组件”选项卡,点击“浏览”,在LabelTextBox工程目录下找到“LabelTextbox.dll”程序集,
3、确定后,在工具箱中出现该控件的图标,
4、直接将该控件拖到WEB窗体就能使用了。


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:46 
学习创建工程库、在自己的项目中应用  

1、  启动VS200X  

2、  选择新建解决方案  

3、  选择缺省的方案类型,选择 Web控件库。Web控件库不需要web站点,基本上是一个DLL类型库  

4、  输入自己的类型库的名称,譬如ASPCTLLib之类的。这个决定了namespace和以后其他工程使用此库的引用库名。  

5、  系统自动产生的代码如下:  

using System;  

using System.Web.UI;  

using System.Web.UI.WebControls;  

using System.ComponentModel;  

   

namespace ASPCtlLib  

{  

     /// <summary>  

     /// WebCustomControl1 的摘要说明。  

     /// </summary>  

     [DefaultProperty("Text",  

          ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>"]  

     public class WebCustomControl1 : System.Web.UI.WebControls.WebControl  

     {  

          private string text;  

          [Bindable(true),  

              Category("Appearance",  

              DefaultValue(""]  

         public string Text  

         {  

              get  

              {  

                   return text;  

              }  

              set  

              {  

                   text = value;  

              }  

         }  

   

         /// <summary>  

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

         /// </summary>  

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

          protected override void Render(HtmlTextWriter output)  

         {  

              output.Write(Text);  

         }  

     }  

}  


  


6、  AssemblyInfo.cs的介绍  

7、  编译此工程得到ASPCTLLIb.dll  

8、  其他项目引用


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:47 
如何引用自己建立的Web控件库  

1、  打开/新建一个asp.net项目  

2、  引用ASPCTLLib.dll,将会在引用中出现aspctllib,同时将之前的dll文件复制到当前工程的目录  

3、  将自己的Web控件库中控件加入toolbar的选项卡:右击选项卡,自定义工具箱,选择.net框架组件,浏览,找到aspctllib.dll加入,即可看到名为WebCustomControl1的组件存在于工具箱  

4、  打开自己的aps.net web 项目,选择一个web窗体,可以将自己的控件加入到其中。缺省的设计时此控件会显示:[WebCustomControl1 ” WebCustomControl1”]。  

5、  选中窗体中的此控件,打开属性进行编辑,基本上缺省的设计控件仅有一个Text属性属于定制属性,输入特定文字。  

-------------------------------------------------------------------------------
ASP.NET组件设计(2)   
从继承关系上看,Asp.net 服务器控件的类别大致上分为4类:  

1、  用户控件  

类似page,基本上不需要编程,可以将某个aspx页面作为复用组件使用。  

   

2、  LiteralControl  

ASP.NET 将所有不需要服务器端处理的 HTML 元素和可读文本编译为该类的实例。例如,开始标记中不包含 runat="server" 属性/值对的 HTML 元素被编译为 LiteralControl 对象。  

文本控件的行为与文本容纳器一样,这意味着可以从文本控件提取文本,并通过父服务器控件的 Controls 属性从父服务器控件的 ControlCollection 中移除文本控件。因此,当开发从 LiteralControl 类导出的自定义控件时,确保由控件自己执行任何所需的预处理步骤,而不是使用对 LiteralControl.Render 方法调用的调用来实现它们。一般都会这样做以提高 Web 应用程序的响应时间。  

LiteralControl一般不会触发服务器端事件。  

可以以编程方式分别使用 ControlCollection.Add 或 ControlCollection.Remove 方法,从页或服务器控件添加或移除文本控件。  

   

3、  HtmlControl  

HTML元素的asp.net模型服务器端对应组件。每一个HtmlControl直接对应于特定的HTML元素(不一定是输入元素)。  

4、  WebControl  

通常的Web控件。可以理解为属于复杂的HTML元素以及服务器端处理逻辑组成的。  

   

继承关系图:  

System.Object  

   System.Web.UI.Control  

        System.Web.UI.TemplateControl  

               System.Web.UI.Page  

        System.Web.UI.UserControl  

        System.Web.UI.LiteralControl  

        System.Web.UI.HtmlControl  

        System.Web.UI.WebControl  

   

通常需要程序员开发的属于用户控件、web控件。xxx  

从WebControl继承而来的web服务器组件,往往继承了丰富的UI元素和控制能力。  

   

用户控件  

1、  为什么是用户控件  

现代人喜好偷懒,喜欢“所见即所得”以及“拖放”式的编程。在一个阿asp.net web项目中往往会在多个页面中存在共用的UI,譬如header footer等,如果所有页面的内容都一致,往往采用包含特定的js文件来实现,但如果这些多个页面都需要的UI部分跟随不同的用户状态等不同而会不同,这是必须采用动态逻辑处理,普通的js/html就无法满足要求。之前asp中采用include asp文件来实现,现在asp.net改变了包含asp文件的种种缺限而采用用户控件来解决。  

用户控件本质上是一个独立的asp.net文件,扩展名为ascx。用户控件通常依赖于特定的asp.net web项目。当使用用户控件时,asp.net页面解析器从aspx文件中动态生成一个类,将其编译到一个特定的装配件(临时缓存中托管dll),并按照.net方式引用此类实例,并进行处理。


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:47 
2、  如何得到用户控件  

得到用户控件,在vs中实际上仅需要:  

在web项目中添加—〉用户控件—〉输入用户控件名—〉在得到的空白页面进行UI设计,并存储。  

使用时,将用户控件拖放在web 窗体上,即可使用用户控件。此时vs替代我们做了一下工作:  

在使用用户控件的页面添加一个register指令。具体为:  

<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %> 对于页面解释器可解释为:将<uc1: WebUserControl1 作为用户控件来解释,uc1为标签前缀(类似标准web控件的asp标签前缀),WebUserControl1作为此用户控件的标签,遇到这一组合就解释为使用用户控件实例。Src值为该用户控件源文件所在的虚拟路径,但不可以为绝对路径。  

   

3、  用户控件的实质(asp.net的用户控件的背景)  

asp.net是编译的,处理用户控件同处理页面是类似的,页面中所有元素都是编译成特定类被asp.net页面类调用、触发事件的。用户控件也是通过此途径被复用的。当处理用户控件时,页面框架执行以下步骤:  

解释ascx文件,相应解释成为一个派生于System.Web.UI.UserControl的托管类  

动态编译到自动生成的装配件中。  

以上过程仅在第一次使用用户控件时发生,以后复用此用户控件会省略此步骤。页面使用register指令,将会引用此类。页面中的用户控件会成为此类的实例。实际上用户控件也是编写asp.net类,派生于System.Web.UI.UserControl的类,页面使用这些类如同使用ASP.net的标准类,为以不同在于标准控件类内置可直接实例化使用,而用户控件需要在使用前进行类似页面的编译工作,编译得到类并组装到装配件后可以被实例化。  

   

4、  用户控件编程注意事项  

用户组件不可以通过new方式实例化,因为用户控件类属于动态生成,new的时候(这个时候应当是页面编译时候,用户控件还没有被运行使用),用户控件类还不存在。但是可以通过Page.LoadControl(string controlname)来装载,此时为了loadControl可以找到用户控件,需要采用refence指令:<%@ Refence Control=”xxx/UserControlSamples.ascx”%> 。  

用户控件可以被另外用户控件嵌套使用,但一定要确保用户控件引用位置正确。  

用户控件本身属于UI,可以被缓存,通过ascx文件顶端的OutPutCache指令来确定。   
        用户控件代码中到的URL是指用户控件存在的路径,而不是调用用户控件的页面代码的路径,需要通过Page.ResolveUrl进行正确的解析。  

-------------------------------------------------------------------------------------

ASP.NET组件设计(3)  

自定义控件(custom control)入门  

在服务器端中执行程序逻辑的组件,是asp.net 应用程序的基本构造块。为了能够在asp.net环境执行,必须满足一定条件。  

        为了能够参与到网页框架执行,需要满足IComponent, IDisposable, IParserAccessor,   IdataBindingsAccessor等接口。所以框架提供System.Web.Control类供控件开发者继承。  

IComponent     提供组件所需的基本功能,接口实现为:  

        {  

        ISite Site {get; set;}//提供站点接口,组件可以通过此接口访问容器  

        event EventHandler Disposed;        //事件  

} 如果实现了此接口,就成为可设计组件,可加入到可视化设计器工具箱,能够脱放到页面(Isite接口)中,属性浏览器中显示属性。  

IDisposable  接口实现组件自身资源释放(Icomponent实际上继承自IDisposable  )  

IParserAccessor 该接口规定AddParsedSubObject(object obj)方法用于通知服务器控件已分析元素(XML 或 HTML)。分析元素时,元素被识别为实现该接口的服务器控件的子级。这些元素将被转换为对象。实现该接口时,所创建的控件在被通知已分析元素后立即定义要发生的处理。  

IDataBindingsAccessor 接口允许在设计时访问控件的数据绑定表达式集合。  

{  

       DataBindingCollection DataBindings {get;}// 指示控件的所有数据绑定的集合。此属性为只读。  

bool HasDataBindings {get;} //返回控件是否包含任何数据绑定逻辑。  

}  

   

       继承自Control的WebControl类为表现HTML(毕竟最后用户看到的是HTML)而在Control类中加入了一些新的功能,如样式、字体、背景、前景。。。


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
离线 马甲走江湖
江湖任我行


精华贴数 4
个人空间 70
技术积分 19628 (46)
社区积分 26093 (41)
注册日期 2006-10-26
论坛徽章:149
现任管理团队成员金牌徽章银牌徽章铜牌徽章2008欧洲杯之星欧洲冠军杯纪念徽章
2008北京奥运纪念徽章:蹦床体育版块博采纪念徽章2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:柔道

发表于 2006-11-21 16:47 
Control类的定义:  

       公共属性:  

ClientID 获取由 ASP.NET 生成的服务器控件标识符。   

Controls 获取 ControlCollection 对象,该对象表示 UI 层次结构中指定服务器控件的子控件。   

EnableViewState 获取或设置一个值,该值指示服务器控件是否向发出请求的客户端保持自己的视图状态以及它所包含的任何子控件的视图状态。   

ID 获取或设置分配给服务器控件的编程标识符。   

NamingContainer 获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 Control.ID 属性值的服务器控件。   

Page 获取对包含服务器控件的 Page 实例的引用。   

Parent 获取对页 UI 层次结构中服务器控件的父控件的引用。   

Site 获取有关服务器控件所属 Web 站点的信息(原文自MSDN,但是我认为不对,应该是指组件的“容器”站点,并非 web site)。   

TemplateSourceDirectory 获取包含当前服务器控件的 Page 或 UserControl 的虚拟目录。   

UniqueID 获取服务器控件的唯一的、以分层形式限定的标识符。   

Visible 获取或设置一个值,该值指示服务器控件是否作为 UI 呈现在页上。  

   

公共方法  

DataBind 将数据源绑定到被调用的服务器控件及其所有子控件。   

Dispose 使服务器控件得以在从内存中释放之前执行最后的清理操作。   

Equals(从 Object 继承) 已重载。确定两个 Object 实例是否相等。   

FindControl 已重载。在当前的命名容器中搜索指定的服务器控件。   

GetHashCode(从 Object 继承) 用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。   

GetType(从 Object 继承) 获取当前实例的 Type。   

HasControls 确定服务器控件是否包含任何子控件。   

RenderControl 将服务器控件的内容输出到所提供的 HtmlTextWriter 对象中;如果已启用跟踪功能,则存储有关控件的跟踪信息。   

ResolveUrl 根据传递给 TemplateSourceDirectory 属性的值,将相对 URL 解析为绝对 URL。   

ToString(从 Object 继承) 返回表示当前 Object 的 String。  

   

       公共事件  

DataBinding 当服务器控件绑定到数据源时发生。   

Disposed 当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段。   

Init 当服务器控件初始化时发生;初始化是控件生存期的第一步。服务器控件应执行任何创建和设置实例所需的初始化步骤。在该事件内无法使用视图状态信息;它尚未填充。在该事件的生存期内不应访问其他服务器控件,不论它是此控件的子级还是父级。不一定会创建其他服务器控件,也不一定能够访问它们。  

Load 当服务器控件加载到 Page 对象中时发生。通知服务器控件执行任何设置为在每次页请求时发生的处理步骤。开发者可以访问视图状态信息并利用该事件形成 POST 数据。还可以访问页控件层次结构内的其他服务器控件。  

PreRender 当服务器控件将要呈现给其包含的 Page 对象时发生。使用该事件在服务器控件呈现给页的输出之前执行任何更新。在该事件的生存期内可以保存服务器控件视图状态的任何更改。不保存呈现阶段内所做的同样更改。  

Unload 当服务器控件从内存中卸载时发生。  

   

              受保护的属性和方法有:  

              保护的属性  

ChildControlsCreated 获取一个值,该值指示是否已创建服务器控件的子控件。   

Context 为当前 Web 请求获取与服务器控件关联的 HttpContext 对象。   

Events 获取控件的事件处理程序委托列表。此属性为只读。   

HasChildViewState 获取一个值,该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。   

IsTrackingViewState 获取一个值,该值指示服务器控件是否将更改保存到其视图状态。   

ViewState 获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态。   

ViewStateIgnoresCase 获取一个值,该值指示 StateBag 对象是否不区分大小写。   

受保护的方法  

AddParsedSubObject 通知服务器控件某个元素(XML 或 HTML)已经过语法分析,并将该元素添加到服务器控件的 ControlCollection 对象。   

ClearChildViewState 删除服务器控件的所有子控件的视图状态信息。   

CreateChildControls 通知使用基于合成的实现的服务器控件创建它们包含的任何子控件,以便为回发或呈现做准备。   

CreateControlCollection 创建一个新的 ControlCollection 对象来保存服务器控件的子控件(包括文本控件和服务器控件)。   

EnsureChildControls 确定服务器控件是否包含子控件。如果不包含,则创建子控件。   

Finalize(从 Object 继承) 已重写。允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。   

IsLiteralContent 确定服务器控件是否只包含文字内容。Asp.net页面中普通的html标签被asp.net编译为一个 LiteralContent控件(意味着轻型控件)。  

LoadViewState 从 SaveViewState 方法保存的上一个页请求还原视图状态信息。   

MapPathSecure 如果请求服务器控件有足够的安全权限读取映射结果,检索相对于源文件的映射物理文件路径。   

MemberwiseClone(从 Object 继承) 创建当前 Object 的浅表副本。   

OnBubbleEvent 确定服务器控件的事件是否沿页的 UI 服务器控件层次结构向上传递。   

OnDataBinding 引发 DataBinding 事件。   

OnInit 引发 Init 事件。   

OnLoad 引发 Load 事件。   

OnPreRender 引发 PreRender 事件。   

OnUnload 引发 Unload 事件。 注意   在服务器控件生存期的此阶段,服务器控件应执行所有最后的清理操作,例如关闭文件、关闭数据库连接和丢弃对象。   

RaiseBubbleEvent 将所有事件源及其信息分配给控件的父级。   

Render 将服务器控件内容发送到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。   

RenderChildren 将服务器控件子级的内容输出到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。   

SaveViewState 保存自页回发到服务器后发生的任何服务器控件视图状态更改。   

TrackViewState 导致跟踪服务器控件的视图状态的更改,以便这些更改可以存储到服务器控件的 StateBag 对象中。通过 Control.ViewState 属性可访问此对象。


__________________
The following programme is not suitable for children

香车圈子,欢迎您的加入
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问