摘要: 服务器控件开发基础 当开发一个服务器控件时,首先要明白其内部的工作机理。其实在页面内部每一点由asp.net返回的HTML代码无论是简单的span标签,或者是button按钮,或者是复杂的gridview控件,都是由继承自System.Web.UI.Control的对象生成的。控件的属性 控制控件的方法大多是通过控件的属性来操作的,通过控制服务器控件的属性,就可以相应的改变服务器生成的html. 下面是一个服务器控件的属性: 在Visual Studio里,当通过属性窗口来改变控件的属性时,VS会自动将属性添加到对应的aspx的HTML里,而在html内添加属性时,在属性窗口里也会对应显示 阅读全文
posted @ 2010-12-07 21:51 庙子 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 接上篇……..通过查看System.Web.UI.HtmlControls命名空间,我们可以发现,很多HTML对应的标签都可以通过添加runat=”server”属性转化为服务器控件,比如table会转化为HtmlTable对象,但像input 标签可以通过type属性对应不同的服务器对象。当html内的标签没有和上图中的服务器控件匹配时,所有不匹配的html标签都会通过添加runat=”server”转化为HtmlGenericControl服务器控件。下面是对应的服务器控件类与HTML标签之间的对应关系:HTML TagHTML Server ControlformHtmlFo 阅读全文
posted @ 2010-12-07 21:50 庙子 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 封装 在asp.net中,控件被分为两类.用户控件和自定义服务器控件。前者就是我们经常用来将一些可复用的内容封装成的.ascx文件。这里主要研究后者.创建自定义服务器控件 创建自定义控件的第一步是选择以哪一个类作为基类来创建控件,Asp.net最常见的几个基类罗列如下:lSystem.Web.UI.Control:这是所有控件的基类,所有作为控件的类都必须直接或者间接的继承此类,此类仅仅提供最少量的属性和方法。lSystem.Web.UI.WebControls.WebControl:这个类继承于Control类,在实现控件最基本的属性和方法后,又额外提供了控件CSS样式相关的一系列属性。如果 阅读全文
posted @ 2010-12-07 16:37 庙子 阅读(165) 评论(0) 推荐(0) 编辑
摘要: Asp.net请求处理构架当一个客户端浏览器对IIS发起访问请求资源时(比如一个.aspx文件),Asp.net会初始化并维护一个包含了多个Response和Request的Http Session 的客户端的连接。一次典型的访问如下图: 上图中,首先,一个请求发到IIS服务器,IIS会检查请求的扩展名,如果是aspx或者ascx文件,IIS会自动匹配到aspnet_isapi.dll来处理这个请求,如果是其他扩展名的文件,IIS会自动匹配到对应ISAPI文件来处理请求。请求的过程会执行HttpRuntime对象,而HttpRuntiem会利用HttpApplicationFactory对象来 阅读全文
posted @ 2010-12-07 16:35 庙子 阅读(201) 评论(0) 推荐(0) 编辑
摘要: Asp.net提供了很多种与客户端状态交互的方式,控件开发人员可以给控件添加额外的值(比如控件的ViewState)来使控件貌似能记住前一个值.Asp.net提供了四种客户端状态管理的方式。他们是:lViewStatelURL stringslHidden Html VariableslCookiesURL String 利用URL传值请求服务器是简单并且应用最广泛的。比如在电子商务中,一个像这样的地址:http://xxx.com/product.aspx?categoryid=1&productid=1 表示传入两个键值对。 在服务器接收对应值时可以用Request对象的QueryStri 阅读全文
posted @ 2010-12-07 16:25 庙子 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 在Asp.net中,利用Http Post的回传机制意味着可以再客户端存储状态并且可以在服务器接收.Asp.net中大部分控件都提供了存储自身状态的功能并且在自身状态改变时引发对应事件。IPostDataHandler接口提供了在服务器处理客户端通过Http Post回传数据的方法。IPostDataHandler通过实现IPostDataHandler接口,服务器可以在不使用Page和Request对象的情况下来读取客户端回传数据。IPostDataHandler还提供了在用户状态改变的情况下来引发相应事件的框架。IPostDataHandler的定义如下: public interface 阅读全文
posted @ 2010-12-07 16:14 庙子 阅读(130) 评论(0) 推荐(0) 编辑
摘要: WebControl基类 在Asp.net控件开发中,WebControl基类给我们提供了对于控件的Style更加灵活的解决方案,因为在System.Web.UI.Control基类中只能手动的输入呈现在客户端的代码,但如果开发的服务器控件对style的要求较高。那Control基类的局限性就显而易见了,而继承WebControl类作为基类将会是很好的选择。 System.web.UI.WebControls.Webcontrol直接继承与Control类。在继承了Control的特性的基础上,WebControl基类不仅在生成客户端html使用了另一种更好的render方式,并且还提供了对于 阅读全文
posted @ 2010-12-07 15:54 庙子 阅读(233) 评论(0) 推荐(0) 编辑
摘要: EventCollection如果在单个控件中有多个事件,那么使用System.ComponentModel.EventHandlerList对事件进行保存将会在内存占用上有不错的提高。EventHandlerList对一个类内发布多个事件提供了一个列表容器。下面是多个事件和使用EventHandlerList的对比示意:第一步是实例化一个EventHandlerList的实例:protected EventHandlerList eventList = new EventHandlerList();第二步是声明一个容器用于保存事件的keyprivate static readonly obj 阅读全文
posted @ 2010-12-07 15:33 庙子 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 事件和委托之间的暧昧关系往往是大多Web Developer在学习.net中的一个里程碑,当明白事件和委托的关系后,.net水平往往就上了一个新的台阶.下面说到服务器控件的事件模型. 在任何一个服务器编程开发框架中,事件都是解耦功能和具体实现的一剂良方,Asp.net当然也不例外。比如说吧,页面上的button的click事件表示它的功能,而具体的实现将会被分离交给Developer来进行具体实现。 传统的编程模型和基于事件的编程模型可以用下图进行简约概括:我们可以看出事件极大的简化了编程工作,客户端程序只需要注册到事件并且和事件的签名保持一致(即参数个数和类型相同)即可。在事件发生后,客户端 阅读全文
posted @ 2010-12-07 15:19 庙子 阅读(133) 评论(0) 推荐(0) 编辑