社区编辑申请
注册/登录
ASP.NET组件设计学习之ASP.NET服务器控件
开发 后端
ASP.NET组件设计学习之ASP.NET服务器控件主要想大家讲述ASP.NET服务器控件的类别和各自的特点。

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

ASP.NET组件设计之ASP.NET服务器控件1、用户控件

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

ASP.NET组件设计之ASP.NET服务器控件2、LiteralControl

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

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

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

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

ASP.NET组件设计之ASP.NET服务器控件3、HtmlControl

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

ASP.NET组件设计之ASP.NET服务器控件4、WebControl

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

继承关系:

  1. System.Object  
  2.  
  3.    System.Web.UI.Control  
  4.  
  5.         System.Web.UI.TemplateControl  
  6.  
  7.                System.Web.UI.Page  
  8.  
  9.         System.Web.UI.UserControl  
  10.  
  11.         System.Web.UI.LiteralControl  
  12.  
  13.         System.Web.UI.HtmlControl  
  14.  
  15.         System.Web.UI.WebControl 

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

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

ASP.NET服务器控件之用户控件

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指令。具体为:

  1. ﹤%@ 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指令:

  1. ﹤%@ Refence Control=”xxx/UserControlSamples.ascx”%﹥  

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

用户控件本身属于UI,可以被缓存,通过ascx文件顶端的OutPutCache指令来确定。

用户控件代码中到的URL是指用户控件存在的路径,而不是调用用户控件的页面代码的路径,需要通过Page.ResolveUrl进行正确的解析。

ASP.NET组件设计学习之ASP.NET服务器控件的相关信息就向你介绍到这里,希望对你学习ASP.NET组件设计之ASP.NET服务器控件有所帮助。

【编辑推荐】

  1. ASP.NET控件设计时操作列表与模板编辑浅析
  2. ASP.NET控件设计器浅析
  3. ASP.NET组件设计浅谈
  4. ASP.NET组件设计之ASP.NET Timer浅析
  5. ASP.NET组件设计学习之创建工程库
责任编辑:仲衡 来源: cnblogs
相关推荐

2009-08-10 13:59:08

ASP.NET组件设计

2009-08-10 14:31:46

ASP.NET组件设计ASP.NET控件生命

2009-08-10 14:38:29

ASP.NET组件设计

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2009-08-10 10:19:47

ASP.NET组件设计

2009-08-05 16:53:14

ASP.NET组件设计

2009-08-06 10:49:45

ASP.NET服务器控

2009-08-07 13:56:46

ASP.NET控件开发

2009-08-07 17:49:44

控件设计器

2009-07-28 09:46:53

ASP.NET服务器控

2009-08-01 09:21:12

ASP.NET服务器自ASP.NET服务器控ASP.NET

2009-07-24 09:57:25

ASP.NET HTM

2009-08-01 20:59:08

ASP.NET服务器控ASP.NET服务器ASP.NET

2009-08-05 16:59:55

ASP.NET组件设计

2009-08-04 13:10:05

ASP.NET服务器控

2009-07-30 16:52:38

2009-08-10 14:25:33

ASP.NET服务器控

2009-08-06 09:18:01

ASP.NET自定义控ASP.NET控件开发

2009-08-06 18:18:27

2009-08-03 18:00:00

ASP.NET服务器控

同话题下的热门内容

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!Python轻量级Web框架:Bottle库!Python居然被用来开发游戏了?盘点你想不到的Python开发场景用了那么久的Lombok,你知道它的原理么?实战 | 如何用 Python 自动化监控文件夹完成服务部署!Fury:一个基于JIT动态编译的高性能多语言原生序列化框架细思恐极,插上U盘就开始执行Python代码太全了!用Python操作MySQL的使用教程集锦!

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号