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 Yiibai Yiibai</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 Yiibai "></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);
      }
   }
}