《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》 --- 基于VS 2008(兼容VS 2005)/C#

郑健  著      2009年1月出版


内容简介:


本书主要介绍ASP.NET的控件开发,书中通过70多个例子讲解ASP.NET控件开发技术的各个方面,而且剖析了很多控件系统基类源代码,帮助开发人员理解设计模式思想。如果扎实地掌握了ASP.NET控件的运行机制,开发一个页面级的ASP.NET应用程序会变得非常简单。本书宗旨就是让开发人员真正理解ASP.NET技术,帮助开发人员提高ASP.NET开发的技术水平。学完本书后您不仅能够掌握控件开发各个方面的技术, 而且深晓ASP.NET的工作原理。想了解本书更多内容请参见: http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx 。


 

作者介绍:


郑健,网名:【夜战鹰】【ChengKing(ZhengJian)】
2006~2009 多届微软全球最有价值专家;CSDN Blog专家、社区专家、荣誉专家; MSDN中文技术论坛版主, CSDN社区Asp.net版版主、Asp.net控件/组件开发版版主。  
具有多年Web开发经验。目前在北京用友软件集团平台技术部门从事ERP产品的底层UI控件/组件设计工作。个人技术站点链接: http://blog.csdn.net/ChengKing 。

 

  庖丁解牛—封面巨照

  前言

  作者序

  精彩示例截图展示

  全书内容概要

  目录


       第1章  服务器控件概述及开发环境部署
       第2章  服务器控件开发中的调试技术                   [阅读本章内容]
       第3章  从零开始开发服务器控件                         [阅读本章内容]
       第4章  服务器控件属性                                    [阅读本章内容]
       第5章  事件和数据回发机制                               [阅读本章内容]
       第6章  页面状态机制(视图状态和控件状态)         [阅读本章内容]
       第7章  定制自定义控件主题样式               
       第8章  控件客户端编程模型(讲解服务端控件的客户端类制作方案)   
       第9章  定制用户控件
       第10章 开发验证控件
       第11章 在控件中使用嵌入资源(讲解图片/样式/JS脚本/视频等各种嵌入式资源类型的创建方案)
       第12章 开发模板数据绑定控件
       第13章 数据绑定和数据源控件
       第14章 扩展控件方案—GridView
       第15章 自定义控件设计模式下编程汇总
       第16章 ASP.NET Ajax控件开发—客户端
       第17章 ASP.NET Ajax控件开发—服务端
       附录A  .net 3.5技术教程系列(赠送Collection/ASP.NET Ajax/SilverLight/JQuery技术教程)

 

 

在此,非常感谢电子工业出版社负责人能够批准我共享达五章的内容供大家学习!

多谢!!!

 

 

 

 

以下是草稿简介,  等到电子工业出版社编辑好后,我会在此提供5章试读章节.

 

 

作者序

庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术

--基于VS 2008(兼容VS 2005)/C#

 

很多开发人员都有这样的体会,使用Asp.net开发很多年, 但觉得水平总是提高不了? 甚至我发现有超过五年工作经验的资深开发人员对Asp.net技术掌握得也不是很深。其主要原因是在开发过程只注重往广度(横向)去学习各种技术,包括各种最新技术,而没有拿到一个技术后往深度(纵向)去深入研究,还有很多开发人员虽然具有多年工作经验,但只是使用Asp.net技术开发页面级的应用程序,而没有或没有机会接触到Asp.net的底层的技术,比如web应用程序的页面呈现过程等,这些技术并不仅限于Asp.net,而是在基于web平台的B/S架构下必须要掌握的东西。比如一头牛,从表面看看上去浑身都是肉,但如果我们拿着刀去杀一头牛,才知道不是那么容易,仅凭拿刀无规律的硬砍不但会费很大的力气,而且很可能会最终把牛杀得一片痕迹,基原因是我们对牛的身体组织结构比如骨骼架构不熟悉而无法正确的入刀;如果是庖丁的话,解剖一头牛会非常自如,因为他对一头牛的结构了如指掌,这就是所谓的深度(纵向深入研究)。学习Asp.net技术也是这样,如果在工作中只是使用或接触一些肤浅的技术,则很难提高,本书主旨正是用“庖丁解牛”之术解析Asp.net,从深度讲解Asp.net的工作机制。

 

运行环境介绍

本书开发环境主要以本书以微软最新框架.net framework 3.5为基础,整合VS 2008开发环境进行讲解,本书所有随书光盘示例均在IE 7.0浏览器全部验证通过。

.net framework 3.5完全兼容之前的版本,也就是说.net框架3.5之前版本的控件类库是.net framework 3.5的子集,基于这在随书光盘中我专门用VS 2005开发环境做了一套示例(只是缺少.net 3.5新功能特性,如Ajax控件)。这样可以让使用VS 2005或VS 2008的朋友都能够打开随书光盘中的控件工程。在书中的许多技术点我也会以VS 2005和VS 2008这两个开发环境进行对比分析。

书中通过70多个例子讲解Asp.net控件开发技术的各个方面,其中包括60多个控件示例应用,这些示例都是作者精心准备的示例;全书共1?00多页。

 

 

本书主旨及本书特色

准确地讲,Asp.net是一种技术而不是一种语言,了解一门技术的前提是要理解其工作原理。相对来说,学习Asp.net技术要比学习一门语言要难许多。

而本书的宗旨就是让开发人员真正的理解Asp.net技术,帮助开发人员提高 Asp.net开发技术。书中内容主要以控件开发为主,如果扎实地掌握的Asp.net控件的运行机制,则开发一个页面级的Asp.net应用程序会变得非常简单,学完本书后您不仅能够掌握控件开发各个方面的技术, 而且能够知道Asp.net的工作原理。

本书不是讲解怎么使用Asp.net控件,而是实实在在的讲解怎么开发控件。在讲解控件开发中过程中剖析了很多控件系统基类源代码,多接触些.net framework的源代码对设计模式思想的理解也会更深刻,相对于书中的理论这是实践。

书中有些重要的知识点可能一般开发人员永远不会在工作中用到,但这些知识可以让您对Asp.net技术理解的更透彻,更深刻。

此外,控件开发工作的好处是有更多机会实战面向对象, 比如控件中的接口非常多,一个好的控件不仅在于功能强大,性能好,也在于创建的控件是否易重用,是否易扩展,是否能用尽量少的代码实现我们的必要功能。

此外,看完本书, 您将能够理解Asp.net页面以及其中每个元素的生成过程。Asp.net开发实质上就是应用控件的过程,我们在页面中使用的每个控件,甚至页面都是一个派生自System.Web.UI.Page控件的类,只是Page控件是一个特殊的容器控件,而它的生成周期与一般控件生成周期是一样的,在书中也有一些讲解Page控件运行机制的知识点。当知道了控件的工作原理再来开发一个页面则会非常容易,也可以说学习控件开发是加速掌握Asp.net技术的有效途径。

另外,本书注册理论实践结合,针对每个Asp.net控件开发技术知识点,基本上都会有对应的示例应用。

在章节分类方面,按照技术点类别进行分类,内容比较全面,本书也可以作为查找手册使用。对每个控件开发技术点,都进行了详尽的阐述。

 

是什么原因让我有写这本书的意愿

开始我仅仅是把控件开发经验写在博客上, 后来发现这样写在Blog上比较琐碎,最大的缺点是不能保证知识点前后连贯性,也不能系统地有始到终全面的讲解完整一种技术。慢慢地随着开发经验的增多,惭惭就有了写这本书的打算,乃至本书最终出版。

本书可以帮助读者提高Asp.net开发技能,对我来说也是对近几年工作一个系统总结,在写书的过程中自己能力也又提高了许多。

Asp.net技术可以说是技术的一次伟大变革,但也对开发人员带来一些隐患,因为它使开发人员变得“比较傻”,web服务器技术是一个比较复杂的技术,程序员天生就遇到Asp.net,从而认为开发web程序像cs架构那么简单,不但不了解客户端技术,而是由于Asp.net的易用性(为了实现易用性而把一些web技术封闭到底层)使开发人员对服务器端技术也不甚了解。我对这个是比较愤慨的,这也是我要写这本书的另一个重要原因。我发现好多开发人员对Asp.net技术的理解甚微,与我一起工作的甚至有很多年开发经验的朋友对一些Asp.net基本性的原理还不了解,也可以说终究是因为Asp.net技术的出现以及开发环境的集成性让很多开发人员变成“傻瓜式”的编程,使开发人员没有了机会去了解那些东西。拿Asp.net为例,举几个开发人员常犯的比较基础的认识错误:

Ø  分不清楚控件的服务端和客户端ID

页面中有个ID为TextBox1的服务端控件,很多开发人员在客户端访问该控件的DOM元素是这么访问的:

 

var txtbox = document.getElementByID(“TextBox1”);

 

之后有一天,他突然发现代码出问题了,通过以上代码不能够再检索到TextBox1控件的客户端元素了。对服务端控件来说这种写法是错误的,这里的正确写法是:

 

var txtbox = document.getElementById('<%= TextBox1.ClientID %>');

 

出错原因是没有理解一个服务端控件不像客户端控件只有一个id,服务端控件有三个属性标示控件的唯一名称,这三个属性是:ID,UniqueID和ClientID。其中ID 表示我们给它命名的ID,不管在服务端还是客户端程序中不会使用这个ID; UniqueID表示控件的服务端ID, 在服务端标志控件的唯一名称; ClientID表示控件的客户端ID,在客户端标记页面中元素唯一名称。从使用角度讲, 如果继承了INamingContainer接口, 当我们为子控件设定一个ID后, 它的UniqueID和ClientID会自动加上父控件名称和分隔符作为前缀;一般来说, 在服务端分隔符默认使用 “$” 进行分隔(UniqueID), 但是到了客户端会自动将这些 “$” 转换为下划线 “_”(ClientID),即客户端ID和服务端ID名称是一样的, 只是分隔符不同。

上面代码出错的原因是某天他把TextBox1控件放到了母版页容器控件中。在增加母版页之前,TextBox1控件由于没有父容器,所以它的ID,UniqueID以及ClientID都是”TextBox1”,只是恰同巧合;一旦,TextBox1放到了容器控件中,它的UniqueID和ClientID都会发生改变,要增加父容器的名称作为前缀,比如它的ClientID可能变为:“Panel1_TextBox1”,服务端UniqueID变为:“Panel1$TextBox1”。这里限于篇幅,后面章节还有详解。

 

Ø  滥用Asp.net提供的系统级对象

基于一些开发人员对ViewState(还包括Cache,Session等)机制的不了解,导致在开发过程中滥用。比如误认为ViewState是存储在客户端(表面看是在页面中)而不是服务端,而把ViewState当作一个海量容器来用,甚至把页面上的业务列表数据都缓存到ViewState中,最终导致页面流量庞大导致打开页面速度非常慢还找不到原因。

学习一种技术要区别于一种语言,首先要了解Asp.net各个对象的机制,简单地说ViewState的工作流程是这样的:每次提交时, 它都会以 客户端到ó服务端 的形式来回传递一次, 当处理完成后, 最后会以处理后的新结果作为新的ViewState存储到页面中的隐藏字段, 并与页面内容一起返回到客户端。

上面导致页面非常慢的原因是,开发人员不了解Asp.net的页面呈现过程,误把业务级数据的序列化字符串存储到页面上的hidden控件中,从而导致页面字节数变得庞大,使传输速度成为颈瓶。ViewState最喜欢存储数据量少的键/值串。有关页面状态(视图状态和控件状态)的保存在第6章有专门讲解。

 

还有朋友问我,在页面提交时要在服务器上运行一段JavaScript代码,而不是在客户端运行,应该怎么做?或者有的朋友要求在两个服务端代码段中间执行一段JavaScript脚本该怎么做?

出现这些问题的最根本原因是开发人员对Asp.net技术运行机制了解清楚,没有对Asp.net服务端控件生命周期,以及客户端脚本是必须在服务端执行完成后才在客户端执行的。

我对面向对象编程的一点观点:使用面向对象思想构建软件可以带来很多好处,比如封装性,扩展性等等,好处多多,这里就不一一列举。这里我要说的是面向对象给开发人员带来的隐患。很多开发人员进行面向对象开发时,都是在不了解基类的前提下进行派生并开发的,如果使用OO技术如果不了解基类真的是非常危险的事情,这里的基类指的是系统基类,三方组件基类或自己开发的基类,特别是系统基类更应该了解,也是最容易忽略的。比如我们在派生类中经常会使用一些类似base.方法名(参数)语句格式的方法,尤其是在控件开发过程中基本上都是派生自系统控件基类开发自己控件的,比如一个简单的 base.Render(e) 方法的使用,我在开发过程中就遇到这么多应用场景:有时候不调用该语句;有时候必须调用;有时候需要调用它但要屏蔽基类base.Render(e)方法体中的一些功或修改部分功能;有时候不调用但要执行base.Render(e)方法中的部分代码语句,等等。要实现这么多场景功能的前提是必须要对base.Render(e)方法了解,更确切应该是对整个基类了解。也有许多开发人员在不知道基类中方法的功能时,通过例子去猜测性的尝试,根据调用的结果来了解它的功能,但在很多时候这种方式得出的结论是不准确的。最好的办法是彻底的看一下基类的源代码。

基于这,本书的另一大特色就是我在讲解每一种控件开发类型时,都会先把系统提供的可继承控件基成员(基类或基接口)作详细解析。这样不但可以让开发人员开发时能够感觉得心应手,更重要的是能够开发出更准确更精确的控件。

 

我的承诺

如果您之前没有从Asp.net控件研究过Asp.net开发, 看了这本书您对Asp.net技术的理解会提高三倍,对于开发一两年的开发人员, 里面有75%以上的内容可能还没有接触到。本书就像“庖丁解牛”之术一样剖析Asp.net,当然前提是您要有耐心的把本书读完,本书由于是介绍的一些Asp.net高级编程技术,可能有些技术对初学者理解比较困难,遇到这种情况千万不要泄气,只要坚持把书看完就会做到前后技术连贯起来。另外,书中讲到的每个例子都在随书光盘中对应章节可以找到,每看完一个例子要运行一下实际的例子,这些例子不仅仅是示例一下每个控件开发技术, 更重要的是它提供了一些控件开发解决方案经验。

 

本书适合读者对象

本书通过讲解Asp.net控件技术提高开发人员的Asp.net技术。适合从事Asp.net技术多年想往深度理解Asp.net工作机制的工作人员;基于考虑到对Asp.net刚刚入门的初级开发人员,我在前面几章也介绍了几个帮助初始人员入门的应用例子;微软公司的Asp.net技术已经经过了三个版本的大演变,已经变为比较成熟的技术,目前在软件企业应用中也广泛被采纳,本书也可以作为在校学生的就业预备教材,本书可以让您理解最流行的基于Web架构的应用程序呈现过程。

 

本书主要内容

第一章:介绍Asp.net服务器控件定义以及服务器控件在软件开发过程中的作用; 讲述服务器控件的类型和Asp.net 提供的控件开发现有基类类结构,  理解.net framework为我们创建控件提供的一些常用基类; 通过一个非常简单的示例, 让我们先从整体上先了解一个控件是怎么生成的, 并讲解怎样去调试, 以及把它部署到Web Site中去运行; 提供示例演示控件生命周期。

第二章:本章主要介绍开发Asp.net服务器控件时所需的调试技术. 内容包括: 客户端脚本调试技术, 服务端控件运行模式和设计模式下的各种调试方法. 针对同一个调试内容可以有多个调试方法, 您可以自己选择您较喜爱的方案。

第三章:本章主要介绍开发Asp.net服务器控件过程. 内容主要讲解 在Asp.net 环境下生成一个控件的过程, 以及.net framework提供的一些开发控件帮助类; 还有笔者在开发控件过程中积累的些许技巧和经验。

第四章:本章主要介绍属性的分类, 及设计时特性功能讲解; 各种复杂属性标记的实现方式, 及通过高级功能 AddParsedSubObject和ControlBuilder实现自定义的复杂属性; 讲解系统常用编辑器及使用方法, 及自定义集合编辑器、自定义弹出式模态编辑器、自定义下拉编辑器、实现辅助计算功能的模态计算器编辑器; 讲解系统常用类型转换器及使用方法, 及自定义的两个类型转换器: 三维坐标类型转换器和集合列表类型转换器; 讲解实现自定义的属性。

第五章:本章主要介绍控件的事件和数据回发处理机制. 主要内容包括怎样定义控件事件; 客户端引发事件及常用几种形式; 讲解捕捉引发的事件; 处理回发的数据及引发回发数据事件机制; 组件控件事件机制及组件控件事件的两种典型事件机制包含法和冒泡法, 在讲解过程中会分别通过示例演示其用法; 最后示例讲解通过控件对AjaxPro组件封装, 实现自动完成控件。

第六章:本章主要内容包括: 页面状态存储原理; 视图状态机制, 包括基本ViewState工作原理及自定义视图状态的应用; 控件状态机制及应用方案; 视图状态和控件的关系; 对页面状态进行加密以及页面状态的清理机制; 动态增加控件使用视图时的注意事项; 对页面状态的保存和装载应用高效率的类型转换器; 页面状态的性能优化策略; 视图状态和控件状态各自的优缺点对比及适用场景。

第七章:本章主要内容包括: .net框架提供了Style类的工作原理以及用法;WebControl基类对样式的支持功能及工作原理;HtmlTextWriter类对控件样式的支持功能;定义控件属性样式时提供了几种可遵守规则;几个通用的CSS=>Style转换方法介绍;使用Style属性定义简单复合控件样式方案,包括对复杂样式的应用以及怎样在控件中保存多个样式的视图状态;通过CSS样式定义控件样式方案,以及与Asp.net主题的无逢集成。

第八章:本章主要内容包括: Asp.net服务器控件对客户端的支持;ClientScriptManager类功能详解;客户端回调原理及示例;介绍使用JavaScript封装客户对象的参照控件示例;介绍使用Htc组件技术封装客户端对象的下拉数据选择控件;在线签名控件;以及常用JavaScript框架介绍。

第九章:本章主要内容包括: 用户控件功能概述;用户控件基类介绍;简单用户控件示例,包括介绍基本用户控件创建方法,怎样为用户定义属性,方法,事件,以及在用户控件中怎样应用视图状态机制;通过复杂数据绑定用户控件示例讲解怎样在用户控件中利用基类Control支持动态创建控件,以及讲解用户控件实现对五种数据源的支持:强类型集合,弱类型集合,数据表,数据集,XML文件数据源,对于XML数据源支持对其数据格式进行验证;用户控件缓存介绍和使用,以及用户控件缓存与页面缓存集成使用时的规则介绍。

第十章:本章主要内容包括: Asp.net内置控件介绍;开发验证控件可继承基类(接口)说明以及各自的应用场景;验证控件的工作原理,分别对服务端和客户端验证过程解析;开发自定义验证控件示例,包括开发自定义验证控件的步骤和示例应用。

第十一章:本章主要内容包括: 控件嵌入资源的工作原理;在控件中应用设置和应用嵌入资源的步骤;通过示例对常用的各种类型的资源文件进行应用;引入几个浏览器常用工具。

第十二章:本章主要内容包括: 模板控件介绍;Asp.net对模板属性控件的支持,包括ITemplate接口介绍和模板容器支持功能介绍;Repeater模板控件解析;自定义模板数据绑定控件应用示例。

第十三章:本章主要内容包括: 数据绑定控件概述;数据绑定控件几个基类解析;数据绑定控件应用示例;数据源控件概述;Asp.net对数据源控件支持的接口和基类解析;最后是一个数据源控件应用示例。

第十四章:本章主要内容包括: 控件控件概述,内容包括扩展控件功能的必要性和使用场景;示例应用,增加GridView实现多级HeaderRow功能;示例应用,包括增加GridView对滚动条的支持,以及实现固定HeaderRow功能。

第十五章:本章主要内容包括: .NET框架对设计时行为的支持;设计时元数据属性支持;设计时的复杂属性序列化;类型转换器和类型编辑器总结;设计模式可用基类介绍;设计时呈现支持;自动套用格式;模板UI设计器;智能操作列表;控件设计器区域。

第十六章:本章主要内容包括: Asp.net Ajax框架概述;Ajax Library对客户端面向对象功能支持,其中包括:命名空间以及Type和Function类介绍,接口类型,类类型以及面向对象继承特征,枚举类型,对反射支持功能;Ajax Library中的常用类型介绍,其中包括:Ajax Library对JavaScript基类型的扩展(Array,Boolean,Date,Error,Object,String类型扩展),还有Sys.Stringbuilder类介绍,此类可以提高运行性能;Ajax Library请求服务和WebServices,包括:Sys.Net命名空间中类介绍,请求过程解析,WebRequest请求示例,使用代码实现Ajax请求服务端示例(从客户端分别访问页面后台和Web服务服务端);Ajax Library对控件客户端类开发的支持,包括:客户端控件基成员(类/接口)介绍,控件客户端生命周期;最后通过一个客户端控件应用示例说明控件客户端类的创建用法,以及介绍Ajax Library中新增的Sys.Debug调试类的简单用法。

第十七章:本章主要内容包括: Asp.net Ajax服务器控件概述;.net 3.5框架中增加的一些重要Ajax服务器控件用法,包括ScriptManager,UpdatePanel,UpdateProgress,Timer,以及扩展程序控件介绍;Asp.net Ajax对服务器控件支持基类解析,包括IScriptControl接口,IExtenderControl接口,以及Ajax控件基类ScriptControl和ExtenderControl详细解析;最后通过两个具体应用分别说明ScriptControl和ExtenderControl这两种类型控件的创建用法。

第十八章:本章主要内容包括: 对.net提供的集合类进行优缺点和适用场景对比,主要内容有:集合类型比较(涉及到Array,ArrayList,Hashtable,SortedList,Query,Stack,BitArray,BitVector32,NameObjectCollectionBase,NameValueCollection等集合类),选择使用哪种集合,强类型集合;Asp.net Ajax框架教程;SilverLight技术教程;JQuery框架教程。本章内容与Asp.net控件开发技术没有直接关系,主要是为表达读者对本书的关注,我把.net 3.5的一些最新流行技术学习教程与大家共享下。只是限于篇幅,对后面的Asp.net Ajax,SilverLight和JQuery这三个教程在书中只列出了目录大纲,它们的具体教程和示例应用代码由于内容太多,没有写入本章,您可以在本书随书光盘中找到。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值