ASP.NET自定义控件

ASP.NET允许用户创建自己的控件。这些用户定义的控件分为:

  • 用户控件
  • 自定义控件

用户控件

用户控件的行为与微型ASP.NET页面或Web表单类似,可以被许多其他页面使用。这些是从System.Web.UI.UserControl类派生的。这些控件具有以下特征:

  • 它们有一个.ascx扩展名。
  • 它们可能不包含任何<html><body><form>标签。
  • 它们有一个控件指令,而不是一个Page指令。

为了理解这个概念,让我们创建一个简单的用户控件,它将作为页面的页脚。要创建和使用用户控件,请执行以下步骤:

  • 创建一个新的Web应用程序(ASP.NET网站项目:UserControls )。
  • 右键单击【解决方案资源管理器】上的项目文件夹,然后选择【添加新项目】。
  • 从【添加新项目】对话框中选择【Web用户控件】并将其命名为footer.ascx。 最初,footer.ascx只包含一个控件指令。
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs" 
     Inherits="customcontroldemo.footer" %>
    
  • 将下面的代码添加到文件中(上面代码保持不变,新增下面代码):

    <table>
     <tr>
        <td align="center"> Copyright ©2012 - 2018 zaixian zaixian</td>
     </tr>
    
     <tr>
        <td align="center"> Location: Haikou </td>
     </tr>
    </table>
    

要将用户控件添加到网页,要将Register指令和用户控件的一个实例添加到页面。Default.aspx文件中的代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>用户控件示例</title>
</head>
<body>
    <form id="form1" runat="server">
         <div>

            <asp:Label ID="Label1" runat="server" Text="Welcome to ASP.Net zaixian "></asp:Label>


         </div>
        <hr />
         <Tfooter:footer ID="footer1" runat="server" />

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

需要注意以下几点:

  • Register指令为控件指定标签名称和标签前缀。
    <%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
    
  • 在页面上添加用户控件时,应使用以下标记名称和前缀:
    <Tfooter:footer ID="footer1" runat="server" />
    

运行上面项目,得到以下结果 -

自定义控件

自定义控件作为单独的程序集部署。 它们被编译成动态链接库(DLL),并用作其他ASP.NET服务器控件。它们可以通过以下任何一种方式创建:

  • 通过从现有控件派生自定义控件
  • 通过组成一个新的自定义控件组合两个或更多现有的控件。
  • 从基控制类派生。

为了理解这个概念,让我们创建一个自定义控件,它将简单地在浏览器上显示一条文本消息。 要创建此控件,请执行以下步骤:

  • 创建一个新的网站(ASP.NET网站项目:CustomControls )。右键单击【解决方案资源管理器】中树顶部的解决方案(不是项目)。

  • “新建项目”对话框中,从项目模板中选择“ASP.NET服务器控件”(如果没有找到,请从左侧的联机中搜索安装)。

上述步骤添加了一个新项目,并为该解决方案创建了一个完整的自定义控件,称为ServerControl1。要使用此控件,必须在将网页注册到网页之前将其添加为网站的引用。 要添加对现有项目的引用,请右键单击该项目名称(不是解决方案),然后单击添加引用。

从添加引用对话框的项目选项卡中选择CustomControls项目。 解决方案资源管理器应显示参考如下图所示 -

要在页面上使用该控件,请在@Page指令下添加Register指令:

<%@ Register Assembly="CustomControls"  Namespace="CustomControls"  TagPrefix="ccs" %>

下面就可以使用该控件,与其他控件类似。

<form id="form1" runat="server">
   <div>
      <ccs:ServerControl1 runat="server" Text = "I am a Custom Server Control" />
   </div> 
</form>

在上面,我们设置了自定义控件的Text属性的值。ASP.NET在创建控件时默认添加了此属性。但还需要以下后端代码实现显示功能。ServerControl1.cs 的代码如下 -

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControls
{
   [DefaultProperty("Text")]
   [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")]

   public class ServerControl1 : WebControl
   {
      [Bindable(true)]
      [Category("Appearance")]
      [DefaultValue("")]
      [Localizable(true)]

      public string Text
      {
         get
         {
            String s = (String)ViewState["Text"];
            return ((s == null) ? "[" + this.ID + "]" : s);
         }

         set
         {
            ViewState["Text"] = value;
         }
      }

      protected override void RenderContents(HtmlTextWriter output)
      {
         output.Write(Text);
      }
   }
}

上一篇: ASP.NET数据绑定 下一篇: ASP.NET个性化