asp.net 控件开发学习笔记(1)

摘要:
asp。Net分为用户控件开发和用户自定义控件开发。TagName:指使用的控件的名称。要实现自定义控件,必须为control类的OnPaint事件编写代码,并在OnPaint事件中绘制自定义控件。然而,自定义控件的实现可能不适用于所有应用程序。当需要适应其他情况时,可能需要重新开发和编译。

这周末学习了 整理了控件开发的知识,顺便系统的整理下。

asp.net 中控件开发分为 用户控件开发和自定义控件开发。

1.用户控件

用户控件的后缀名为.ascx,用户控件是不能被用户直接访问的,只能嵌入到aspx页面中(设计模式下直接拖入)

<%@ Register TagPrefix="Sample" TagName="Login" Src="http://t.zoukankan.com/~/mycontrol.ascx" %>  //声明控件引用

在这段代码中,有几个属性是必须编写的,这些属性的功能如下所示:
TagPrefix:定义控件位置的命名控件。有了命名空间的制约,就可以在同一个页面中使用不同功能的同名控件。
TagName:指向所用的控件的名字。
Src:用户控件的文件路径,可以为相对路径或绝对路径,但不能使用物理路径。

例1:博客园后台管理的顶部导航就可以通过一个用户控件来实现。

asp.net 控件开发学习笔记(1)第1张

 新建WebUserControl.ascx,cs代码如下:

asp.net 控件开发学习笔记(1)第2张asp.net 控件开发学习笔记(1)第3张代码
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Inc_WebUserControl : System.Web.UI.UserControl
{

    
private String type = "";//通过类型判断导航样式

    
public String _type
    {
        
get { return type; }
        
set { type = value; }
    }

    
protected void Page_Load(object sender, EventArgs e)
    {
                 
                Response.Write(_type);
     
       
    }
}

text_control.aspx页面html如下:

asp.net 控件开发学习笔记(1)第4张asp.net 控件开发学习笔记(1)第5张代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="text_control.aspx.cs" Inherits="text_control" %>



<%@ Register src="Inc/WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>无标题页</title>
</head>
<body>
    
    
<form id="form1" runat="server">
    
<div>
      
    
</div>

    
<uc1:WebUserControl ID="WebUserControl1" runat="server" _type="随笔"/>

    
</form>
</body>
</html>

在不同页面拖入该控件后,设置不同的_type值,从而控制.ascx生成的html。

这里需要注意的是 页面Page_Load的执行顺序.

(1)文件包含 模板页,内容,用户控件

       先执行内容页Page_Load,再执行模板页 Page_Load,最后执行用户控件Page_Load

      当有多个不同的用户控件时候,内容页中靠前的用户控件Page_Load先执行。

 (2)文件为 只有 内容,用户控件

      先执行内容页Page_Load,再执行用户控件的Page_Load。

 2.自定义控件

    自定义控件与用户控件不同,自定义控件需要定义一个直接或间接从Control类派生的类,并重写Render方法。在.NET框架中,System.Web.UI.ControlSystem.Web.UI.WebControls.WebControl两个类是服务器控件的基类,并且定义了所有服务器控件共有的属性、方法和事件,其中最为重要的就是包括了控制控件执行生命周期的方法和事件,以及ID等共有属性。

    自定义控件又可以分为以下三种:

    (1).复合控件   将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求
    (2).扩展控件   就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求
    (3).自定义控件  就是直接从System.Windows.Forms.Control类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。

 3.用户控件和自定义控件的异同

   对比用户控件和自定义控件,很多人或认为用户控件更加容易开发,而自定义控件的门槛较高,不方便应用程序的开发。其实不然,用户控件更适合创建内部的应用程序特定的控件,例如用户登录控件会在该项目中经常使用,所以创建用户控件能够极快的提高应用程序开发。而自定义控件通常应用到更适合创建通用的可再分发的控件,例如常用的开源HTML编辑器Fckeditor就可以说是一个优秀的自定义控件。

通常用户控件在一个项目中经常使用,而自定义控件用来在通用的程序中使用,当网站应用程序开发中,导航控件如果用用户控件实现,是非常方便的。但是通过自定义控件实现,可能并不能适合所有的应用场合,当需要适应其他场合时,可能需要重新开发和编译。具体的讲,用户控件和自定义控件可以从以下几个方面来说明它们的区别:

(1).使用率

在选择使用用户控件和自定义控件时,可以首先考虑使用率。如果开发的应用程序只是需要小范围的使用,则可以考虑用户控件,而如果开发的自定义控件能够在大部分的应用程序中被应用,则可以考虑自定义控件。

(2).创建技术

用户控件和自定义控件的创建技术是不相同的,并且用户控件和自定义控件创建的难度也不相同,用户控件是以.ascx形式声明并创建的,开发过程也比较简单,并且有设计器提供设计支持,而自定义控件是从System.Web.UI.Control派生而来的,开发过程稍微复杂,也没有设计器提供设计支持。

(3).生成方式

用户控件和自定义控件生成的方式不同,用户控件是以.ascx的形式呈现,而自定义控件是以DLL的形式呈现,通过添加引用,自定义控件能够在【工具箱】中显式,能够像服务器控件一样拖动到页面,并且能够通过编程开发增加自定义属性。而用户控件无法在工具箱显示,也不能够像自定义控件那样增加自定义属性。

(4).性能

虽然用户控件和自定义控件编写的过程不同,也遵循不同的创建模型,但是用户控件和自定义控件都是从System.Web.UI.Control直接或间接的派生的,在性能上没有很大的差别,主要是因为当用户控件在页面中第一次使用时,将作为普通的服务器控件被解析并编译进配件,第二次使用时,就和其他编译型控件一样。   

  

参考:1. 学习文档

        2. 测试代码

免责声明:文章转载自《asp.net 控件开发学习笔记(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇社区专家谈 12306爱的勇气下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转载).net 缓存处理

概述 在ASP.NET应用程序构建过程中,为了提高应用程序的性能,缓存处理无疑是一个非常重要的环节。通常,我们将一些频繁被访问的数据,以及一些需要大量处理时间得出来的数据缓存在内存中,从而提高性能。例如,如果程序需要处理一张报表,这张报表的数据是关联的几张数据库表,并通过大量的计算得到的数据。我们知道表关联是比较耗时的,如果关联之后得出的数据再进行聚合排序...

ASP.Net缓存总结(转)

提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存。Asp.net下的缓存机制十分强大,用好缓存机制可以让我们极大的改善web应用的性能,下面是一些总结的缓存的知识点,与大家分享交流:1.页面缓存 要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。  <%@ OutputCache Cache...

动态创建DataGrid的模版列(转)

有的时候我们需要邦定很复杂的DataGrid,我们知道DataGrid,DataList等控件都有Template列,我们可以通过动态的邦定模版列来实现,复杂逻辑的邦定。由于Page继承TemplateControl,所以在Page对象里面就可以使用TemplateControl类里面的方法LoadTemplate,我们可以利用这个方法加载指定路径用户控件...

C#-web用户控件

从用户控件向页面中传递数据:法一:使用Session传递。1.在按钮点击时候,把值放到Session中去。2.重写页面的OnLoadComplete方法,在这个方法中把值从Session中取出来。注意:不要在Page_Load中取出Session 来。原因是:每次点击按钮的时候,Page_Load总是在按钮的Click之前触发。 法二:使用代理(委托 d...

解剖PetShop系列之六PetShop表示层设计

表示层(Presentation Layer)的设计可以给系 统客户最直接的体验和最十足的信心。正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的。一件交付给客户使用的产品,如 果在用户界面(User Interface,UI)上缺乏吸引人的特色,界面不友好,操作不够体贴,即使这件产品性能非常优异,架构设计合理,业务逻辑都满足了客户...

WPF中UserControl的属性和事件

WPF中自定义控件有两种,一种是继承自control的自定义控件,另一种是继承自UserControl的用户控件。用户控件可以认为是一系列原生控件的集合。本文主要介绍如何创建一个用户控件,以及用户控件的自定义属性和事件。 一、创建一个用户控件 1、一种是直接创建用户控件工程,这样会生成DLL,使用时调用DLL 2、在当前工程中直接创建 创建之后会生成一...