文章教程

7.5用户控件

8/31/2020 9:19:23 PM 人评论 次浏览

7.5 用户控件

有编程经验的用户应该知道,程序开发语言有着代码的可重用性,通常使用类和函数来实现。页面中的控件组合也有着可重用性,除Visual Studio工具箱中的控件以外,可以使用用于创建ASP.NET网页的相同技术创建可重复使用的自定义控件。这些控件称作用户控件。

7.5.1 用户控件概述

用户控件是一种复合控件,工作原理非常类似于ASP.NET网页。可以向用户控件添加现有的Web服务器控件和标记,并定义控件的属性和方法;然后可以将控件嵌入ASP.NET网页中充当一个控件。

有时可能需要控件中具有内置Web服务器控件未提供的功能。在这种情况下有两种控件可以自定义创建,如下所示。

(1)用户控件。用户控件是能够在其中放置标记和Web服务器控件的容器。用户控件创建之后可以作为一个控件对待,为其定义属性和方法。

(2)自定义控件。自定义控件是编写的一个类,此类从Control或WebControl派生。

创建用户控件要比创建自定义控件方便很多,因为可以重用现有的控件。用户控件使创建具有复杂用户界面元素的控件极为方便。

用户控件与完整的ASP.NET网页(aspx文件)相似,同时具有用户界面页和代码。可以采取与创建ASP.NET页相似的方式创建用户控件,然后向其中添加所需的标记和子控件。用户控件可以像页面一样包含对其内容进行操作(包括执行数据绑定等任务)的代码。用户控件与ASP.NET网页有以下区别。

(1)用户控件的文件扩展名为.ascx。

(2)用户控件中没有@Page指令,而是有着@Control指令,该指令对配置和属性进行定义。

(3)用户控件不能作为独立文件运行。而必须像处理其他控件一样,将它们添加到ASP.NET页中。

(4)用户控件中没有html、body或form元素,这些元素必须位于宿主页中。

可以在用户控件上使用与在ASP.NET网页上所用相同的HTML元素(html、body或form元素除外)和Web控件。用户控件与ASP.NET页十分相像,它包含若干控件、处理按钮的Click事件和页面的Load事件的代码。

7.5.2 创建用户控件

创建ASP.NET用户控件的方法与设计ASP.NET网页的方法极为相似。在标准ASP.NET页上使用的HTML元素和控件也可用在用户控件上。但是,用户控件没有html、body和form元素,并且文件扩展名必须为.ascx。

在项目中创建用户控件与创建母版页的方法一样,在项目名称处右击,选择添加新建项可打开【添加新项】对话框,选择【Web用户控件】即可。向新用户控件添加任何标记和控件,并为该用户控件将执行的所有任务(例如,处理控件事件或从数据源读取数据)添加代码。

用户控件的属性和方法的定义,可参考页面的属性和方法的定义。通过定义用户控件的属性,就能以声明方式或代码方式设置其属性。

用户控件包含Web服务器控件时,可以在用户控件中编写代码来处理其子控件引发的事件。例如,如果用户控件包含一个Button控件,则可以在用户控件中为该按钮的Click事件创建处理程序。

默认情况下,用户控件中的子控件引发的事件对于宿主页不可用。但是,可以为用户控件定义事件并引发这些事件,以便将子控件引发的事件通知宿主页。

用户控件支持独立于宿主页的缓存指令。因此,可以向页面添加用户控件,并对页面的某些部分进行缓存。

用户控件创建后可以在ASP.NET网页中添加,但是在添加之前需要在ASP.NET网页中进行注册。注册用户控件时要指定包含用户控件的.ascx文件、标记前缀以及将用于在页面上声明用户控件的标记名称。

注册用户控件需要在ASP.NET网页中创建一个@Register指令,包括如下三个属性。

(1)TagPrefix属性:该属性定义用户控件的前缀与用户控件相关联,此前缀将用在用户控件的开始标记中。

(2)TagName属性:该属性定义用户控件的名称,此名称将用在用户控件元素的开始标记中。

(3)Src属性:该属性定义用户控件文件的虚拟路径。Src属性值既可以是相对路径,也可以是从应用程序的根目录到用户控件源文件的绝对路径。为灵活使用,建议使用相对路径。代字号(~)表示应用程序的根目录。用户控件不能位于App_Code目录中。

在网页主体中,可以在form元素内部声明用户控件元素。如果用户控件公开公共属性,要以声明方式设置这些属性。

【范例1】

大多网页中都有着关键字的搜索,如新闻页面中可根据关键字搜索相关新闻,购物网页中可以根据关键字搜索商品。创建一个用户控件用于关键字的搜索,要求包含一个文本框和一个按钮,步骤如下。

(1)首先创建用户控件文件名为WebSelect.ascx,步骤代码省略。向文件中添加服务器控件,为了页面效果,将文本框和按钮放在表中。用户控件代码如下。

    <%@         Control         Language="C#"         AutoEventWireup="true"         CodeBehind="WebSelect.ascx.cs" Inherits="WebApplication1.WebSelect" %>
    <table>
        <tr style="background-color: #CCFFFF; width: 280px; height: 30px; text-align: center">
          <td style="border: medium solid #CCFFFF; width: 70%; ">
              <asp:TextBox ID="TextKey" runat="server" BorderStyle="None" Height="22px" Width="188px"></asp:TextBox></td>
          <td style="width: 30%">
              <asp:Button ID="ButSel" runat="server" Text="搜索" Width="92px" BackColor="#CCFFFF" BorderStyle="None" Font-Size="Large" /></td>
        </tr>
    </table>

(2)创建ASP.NET网页,注册上述用户控件并将用户控件放在页面中,注册指令代码如下。

    <%@ Register src="~/WebSelect.ascx" tagname="WebSelect" tagprefix="sel" %>

(3)向页面中添加上述用户控件,代码如下。

    <sel:WebSelect ID="Select1" runat="server" />

上述代码中,控件的前缀与步骤(2)中的tagprefix属性值对应;控件名WebSelect与步骤(2)中的tagname属性名对应。

7.5.3 ASP.NET用户控件转换

如果已经开发了ASP.NET网页并打算在整个应用程序中访问其功能,则可以对该页面略加改动,将它更改为一个用户控件。将ASP.NET网页转换为用户控件有如下几个步骤。

(1)重命名控件使其文件扩展名为.ascx。

(2)从该页面中移除html、body和form元素。

(3)将@Page指令更改为@Control指令。

(4)移除@Control指令中除Language、AutoEventWireup、CodeFile和Inherits之外的所有属性。

(5)在@Control指令中添加className属性。这允许将用户控件添加到页面时对其进行强类型化。

除此之外,还可以将有着代码隐藏文件的ASP.NET网页转换为用户控件,步骤如下。

(1)重命名.aspx文件,使其文件扩展名为.ascx。

(2)根据代码隐藏文件使用的编程语言,重命名代码隐藏文件使其文件扩展名为.ascx.vb或.ascx.cs。

(3)打开代码隐藏文件并将该文件继承的类从Page更改为UserControl。

(4).aspx文件中移除html、body和form元素。

(5)将.aspx文件中的@Page指令更改为@Control指令。

(6)移除.aspx文件中的@Control指令中除Language、AutoEventWireup、CodeFile和Inherits之外的所有特性。

(7)在.aspx文件中的@Control指令中,将CodeFile属性更改为指向重命名的代码隐藏文件。

(8)在.aspx文件中的@Control指令中添加className属性。这允许将用户控件添加到页面时对其进行强类型化。

教程类别