风影ASP.NET基础教学 6用户控件

在Web系统开发中,经常会有一些功能模块在很多的地方重复出现,例如新闻管理系统中的用户登陆/注册、推荐新闻、热点新闻和页面上的一些固定栏目等。为了提高代码的重用性,减少系统的开发与维护成本,一般会把这些重用性,减少系统开发和维护的成本,一般会把这些重用的功能模块写成单独的通用模块,以供需要的地方引用。

在ASPNET中,要实现这样的通用模块,可以将这些功能模块封装成“用户控件”,然后再需要的页面中引用这些“用户控件”,从而达到了“一次封装,N次复用”的效果。本文将介绍ASPNET用户控件的相关知识,并重点讲解用户控件的封装方法与编程技巧。

用户控件详解

ASPNET WEB控件文件(.ascx)与ASPNET WEB页面文件(.aspx)相似。与WEB页面文件一张,用户控件由含有页面标签的用户界面文件(.ascx),页面脚本文件JS和后台代码CS文件组成。

用户控件可以包含所有web内容,比如静态的HTML内容和ASP.NET控件。同时它还接受和Page对象一样的事件(Load和PreRender)并通过属性暴露一组相同的ASPNET固有的对象 Application、Session、Request、Response。因此可以采用和ASPNET web页面相似的方式来创建用户控件,然后向其中添加所需的标记和子控件。

通常,用户控件和页面存在着以下的区别

1

用户控件的文件扩展名为ascx,而页面为aspx。其中用户控件是从System.Web.UI.UserControl类继承而来的,而Web页面则是从System.Web.UI.Page类继承而来的。

尽管如此,他们却有着许多相同相似的地方,System.Web.UI.UserControl 和 System.Web.UI.Page都是继承自同一个 System.Web.UI.TemplateControl类。因此,System.Web.UI.TemplateControl类的属性和方法,事件都是共有的.

2

用户控件没有Page指令,而换成了@Control指令,该指令对配置以及其他属性进行定义,后面将详细阐述@Control指令

3

用户控件不能作为独立文件运行,你必须像处理其他任何控件一样,将它们添加到ASPNET WEB页面运行

4

用户控件没有<html> <head> <body> <form>。因此除了这些元素以外,可以在用户控件里使用和页面里一样的任何内容。

 

 

@Control指令

@Control指令类似于@Page指令,但@Control指令时在建立ASP.NET用户控件时使用的。@Control指令允许定义用户控件要继承的属性,这些属性值会在解析和编译页面的时候赋予用户控件。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="ASPNETTeach4.WebUserControl1" %>

 

@Control指令可用属性比@Page指令少,他的常用属性有

AutoEnentWireup 指示控件的事件是否自动匹配。如果事件自动匹配则设置为true
ClassName 用于指定需要在请求时进行动态编译的控件的类名。并且可以包括一个类的完整限定名。
CodeBehind 指定与该用户控件关联的后置代码文件路径
EnableTheming 是否使用主题。
EnableViewState 是否启用状态视图
Inherits 后置代码对应的处理的类名
Language 该用户控件使用的语言

 

 

创建简单的用户控件

上面阐述了用户控件的概念和@Control指令,下面我们来看看如何创建一个用户控件以及如何在Web页内使用用户控件。

 

创建一个简单的用户控件

image

 

创建成功之后会出现三个文件

image

 

你会发现和我们创建Web窗体一样。这里就不在赘述。

 

我们来看后置代码

image

除了继承的基类变了以外基本和Web页面一致。

 

我们在这个用户控件里加一些内容。

image

 

用户控件前端代码

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="ASPNETTeach4.WebUserControl1" %>
<table style="width: 100%;">
    <tr>
        <td>
            <asp:Calendar ID="Calendar1" runat="server" 
                BackColor="#FFFFCC"
                BorderColor="#0000cc"
                BorderStyle="Ridge"
                OnSelectionChanged="Calendar1_SelectionChanged"
                CellPadding="0"></asp:Calendar> </td> 
    </tr>
    <tr>
        <td>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td> 
    </tr>
     
</table>

 

事件代码

protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
      Label1.Text = "你选择的日期是:" + Calendar1.SelectedDate.ToLongDateString();
}

 

页面引用代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ASPNETTeach4.WebForm1" %>
 
<%@ Register Src="~/WebUserControl1.ascx" TagPrefix="uc1" TagName="WebUserControl1" %>
 
<!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>
        <uc1:WebUserControl1 runat="server" id="WebUserControl1" />
    </div>
    </form>
</body>
</html>

posted on 2012-08-26 10:27  任生风影  阅读(1401)  评论(0编辑  收藏  举报

导航