ASP.NET组件设计Step by Step(2)

原创 2004年08月02日 22:49:00

从继承关系上看,Asp.net 服务器控件的类别大致上分为4类:

1、  用户控件

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

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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方式引用此类实例,并进行处理。

 

 

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进行正确的解析。

数据库设计 Step by Step

Step by Step (1) 引言:一直在从事数据库开发和设计工作,也看了一些书籍,算是略有心得。很久之前就想针对关系数据库设计进行整理、总结,但因为种种原因迟迟没有动手,主要还是惰性使然。今天...
  • joeyon
  • joeyon
  • 2014年12月24日 11:26
  • 509

数据库设计 Step by Step (2)——数据库生命周期

转自:http://www.cnblogs.com/DBFocus/archive/2011/04/09/2010904.html 引言:数据库设计 Step by Step (1)得到这么多朋...
  • zhouhuakang
  • zhouhuakang
  • 2016年04月10日 16:16
  • 260

正则表达式(2) step by step

\\ 反斜杠\t 间隔 ('\') \n 换行 ('\') \r 回车 ('\') \d 数字 等价于[0-9] \D 非数字 等价于[^0-9] \s 空白符号 [\t\n\x0B\f\r] \S ...
  • splove1107
  • splove1107
  • 2014年02月19日 17:38
  • 308

数据库设计 Step by Step (2)——数据库生命周期

引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外。这也坚定了我把这一系列的博文写好的决心。近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统、完整...
  • Beyond_cn
  • Beyond_cn
  • 2013年08月19日 19:30
  • 581

数据库设计 Step by Step (2)——数据库生命周期

引言:数据库设计 Step by Step (1)——扬帆启航得到这么多朋友的关注着实出乎了我的意外。这也坚定了我把这一系列的博文写好的决心。近来工作上的事务比较繁重,加之我期望这个系列的文章能尽...
  • luoweifu
  • luoweifu
  • 2013年05月01日 07:56
  • 2642

数据库设计 Step by Step (2)——数据库生命周期

引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外。这也坚定了我把这一系列的博文写好的决心。近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统、完整...
  • nchu2020
  • nchu2020
  • 2016年03月28日 21:57
  • 166

二维图像中Mat::setp、Mat::step1理解

一、前言        Mat中的step为构成图像的层次,考虑到Mat多应用于二维图像,本文讨论二维图像step的含义和应用。二维图像数据存储示意图如下:                      ...
  • AP1005834
  • AP1005834
  • 2017年02月01日 19:55
  • 717

Step.js 使用教程(附源码解析)

Step.js(https://github.com/creationix/step)是控制流程工具(大小仅 150 行代码),解决回调嵌套层次过多等问题。适用于读文件、查询数据库等回调函数相互依赖,...
  • zhangxin09
  • zhangxin09
  • 2013年10月25日 15:18
  • 8484

高次同余笔记(一):baby-step-giant-step算法

我们来看这个方程: a,b,p为常数且在int内。、p是质数。 这个怎么搞? 首先x的取值肯定在0到p-1之间。 暴搜?肯定超时啊。 优化暴搜?用meet-in-the-middle? ...
  • Quack_quack
  • Quack_quack
  • 2015年11月17日 00:35
  • 947

机器学习--线性回归R语言

回归分析就是利用样本,产生拟合方程,从而进行预测。简而言之,就是你用你手头上的数据进行模型的训练,然后用你得到的模型对于新数据进行预测。一元线性回归:例子:y...
  • dingchenxixi
  • dingchenxixi
  • 2016年01月20日 16:23
  • 3956
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET组件设计Step by Step(2)
举报原因:
原因补充:

(最多只允许输入30个字)