五:理解控件的运行机制(例:基于Control命名空间的简单控件)

一:先用最简短的话说点理论的
1.asp.net中所有的标准控件都可以重写

2.和控件相关的命名空间有
  System.Web.UI.Control
是所有控件的基类
只提供简单的呈现逻辑,不支持样式表
  System.Web.UI.WebControls.WebControl
继承自Control
支持控件外观
  System.Web.UI.WebControls.CompositeControl
继承自WebControl类
派生出多个控件合成的复合控件

3.控件树的实现原理
首先Page类本身就是一个控件,它继承自Control
所有的控件都有一个Render方法
这个方法负责把控件的内容发送给请求者
在Render方法中会调用一个RenderChildren方法
RenderChildren方法触发所有子控件的生成行为
子控件又有Render方法
子子孙孙无穷尽也...
这就实现了控件树

二开始看例子
建立一个工程
在工程下建立一个类库
其中有一个类,继承自Control类
注意类库要引用web名称空间

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace hellowControl
{
    public class HellowControl:Control
    {
        protected override void Render(HtmlTextWriter writer)
        {
            //要先写div的样式
            writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "180px");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "180px");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "solid");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor, "grey");
            //再写div开始标签
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            //开始写div里的内容,是一个图片
            //先写图片的样式和属性
            writer.AddAttribute(HtmlTextWriterAttribute.Src, "noimage_s.jpg");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Margin, "8px");
            //写image标签开始
            writer.RenderBeginTag(HtmlTextWriterTag.Img);
            //闭合image标签
            writer.RenderEndTag();
            //闭合div标签
            writer.RenderEndTag();
        }
    }
}

个人感觉这个逻辑有点怪异
除了这些也不多说了
然后生成这个类库
你将得到一个dll文件
在你的工具箱中点右键>>>选择项
浏览找到刚才的dll
然后你会发现,你的工具箱里多了一个控件
拖到你的页面就能使用了

这里注意writer.WriteBeginTag()等方法
和writer.RenderBeginTag()是有区别的

 

时间: 2024-08-09 13:09:44

五:理解控件的运行机制(例:基于Control命名空间的简单控件)的相关文章

七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)

组合控件与WebControl控件的事件和属性相差不大组合控件,顾名思义就是把一些控件组合起来形成一个控件这个控件将包含这些控件称为他的子控件 CompositeControl类实现了INameContainer接口这样使得复合控件下的子控件都根据各自的层级关系生成唯一的客户端标识不至于产生重复的ID 组合控件比较重要的方法是:1.EnsureChildControls此方法判断属性ChildControlsCreated是否为true如果不是将执行下面的事件2.CreateChildContr

六:理解控件的运行机制(例:基于WebControl命名空间的控件)

Control类的Render方法在WebControl类中被被分成三部分1:RenderBeginTag,呈现标签的开始2:RenderContents,呈现标签的内容3:RenderEndTag,呈现标签的结束 一般情况下不重写RenderBeginTag和RenderEndTagRenderBeginTag生成什么样的标签由WebControl.TagKey和WebControl.TagName决定默认的TagKey是Span(假设你想直接输出文本,那么你重写的TagKey是Unknown

四:理解Page类的运行机制(例:基于PageStatePersister的页面状态存取)

 有人说类似gridview datalist这样的控件最好不要用在高并发,IO大的网站中企业应用中为了快速开发到可以用一用因为这是一类"沉重"的组件我们姑且不谈这种看法的正确性(我个人觉得有道理)只谈它为什么笨重: 因为这些控件给页面带来了大量的viewstate<input type="hidden" name="____VIEWSTATE" id="____VIEWSTATE" value=这就是页面状态一个页面里

二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)

url重写就是把一些类似article.aspx?id=28的路径重写成 article/28/这样的路径 当用户访问article/28/的时候我们通过asp.net把这个请求重定向到article.aspx?id=28路径有两种方法可以做这件事情 一:基于HttpModule的方案这个方案有有缺点,具体缺点以后再谈我曾写过一篇文章<不用组件的url重写(适用于较大型项目) >就是按这个模式写的 二:基于HttpHandler的方案我们这个例子就是按这个方案做的我们接下来就按这种方式做这个例

一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)

一:简要介绍一下asp.net的执行步骤 1.IIS接收到客户请求 2. IIS把请求交给aspnet_isapi.dll处理 3.(如果是第一次运行程序)装载bin目录中的dll 4.(如果是第一次运行程序)读取各级webconfig中的配置 5.(如果是第一次运行程序)编译装载global.asax,初始化HttpApplication实例 6.创建响应请求的HttpContext 7.创建承载响应结果的HttpTextWriter 8.找到合适的HttpHandler(asp.net页面)

深入理解Android Instant Run运行机制

Instant Run Instant Run,是android studio2.0新增的一个运行机制,在你编码开发.测试或debug的时候,它都能显著减少你对当前应用的构建和部署的时间.通俗的解释就是,当你在Android Studio中改了你的代码,Instant Run可以很快的让你看到你修改的效果.而在没有Instant Run之前,你的一个小小的修改,都肯能需要几十秒甚至更长的等待才能看到修改后的效果. 传统的代码修改及编译部署流程 传统的代码修改及编译流程如下:构建整个apk → 部

068_《Delphi7控件实用程序设计100例》

<Delphi7控件实用程序设计100例> Delphi 教程 系列书籍 (068) <Delphi7控件实用程序设计100例> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 段兴 宋雷 张敬韶 孙丽娜 丛书名: 程序设计实例丛书 出版社:人民邮电出版社 ISBN:7115112975 上架时间:2003-7-21 出版日期:2003 年6月 开本:16开 页码:332 版次:1-1 内容简介 本书选取了利用Delphi 7开发的控件方面

090_《Delphi6控件实用程序设计100例》

<Delphi6控件实用程序设计100例> Delphi 教程 系列书籍 (090) <Delphi6控件实用程序设计100例> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 作者: 段兴 丛书名: 数据库与控件程序设计实例丛书 出版社:人民邮电出版社 ISBN:7115106290 上架时间:2002-11-4 出版日期:2002 年10月 开本:16开 页码:330 版次:1-1 内容简介 本书选取了利用Delph

Silverlight控件注册验证机制探索

先给大家介绍一下Silverlight客户端控件的使用情景.一般来说, Silverlight客户端控件会销售给开发Silverlight程序的公司,他们是控件的购 买者.他们开发的程序中会用到Silverlight客户端控件.但是Silverlight控件 最终是在浏览Silverlight 程序的网站用户机器上执行的.说的有点绕,请参照 下图. 这个纯客户端注册验证机制主要流程如下: 1,控件购买者下载使用Silverlight控件(Silverlight控件中包含 PublicKey及验证