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" />

運行上面項目,得到以下結果 -

ASP.NET自定義控件

自定義控件

自定義控件作爲單獨的程序集部署。 它們被編譯成動態鏈接庫(DLL),並用作其他ASP.NET服務器控件。它們可以通過以下任何一種方式創建:

  • 通過從現有控件派生自定義控件
  • 通過組成一個新的自定義控件組合兩個或更多現有的控件。
  • 從基控制類派生。

爲了理解這個概念,讓我們創建一個自定義控件,它將簡單地在瀏覽器上顯示一條文本消息。 要創建此控件,請執行以下步驟:

  • 創建一個新的網站(ASP.NET網站項目:CustomControls )。右鍵單擊【解決方案資源管理器】中樹頂部的解決方案(不是項目)。

  • 「新建項目」對話框中,從項目模板中選擇「ASP.NET服務器控件」(如果沒有找到,請從左側的聯機中搜索安裝)。

上述步驟添加了一個新項目,併爲該解決方案創建了一個完整的自定義控件,稱爲ServerControl1。要使用此控件,必須在將網頁註冊到網頁之前將其添加爲網站的引用。 要添加對現有項目的引用,請右鍵單擊該項目名稱(不是解決方案),然後單擊添加引用。

從添加引用對話框的項目選項卡中選擇CustomControls項目。 解決方案資源管理器應顯示參考如下圖所示 -

要在頁面上使用該控件,請在[@Page](https://github.com/Page "@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);
      }
   }
}

易百教程移動端:請掃描本頁面底部(右側)二維碼並關注微信公衆號,回覆:"教程" 選擇相關教程閱讀或直接訪問:http://m.yiibai.com

上一篇:ASP.NET數據綁定 下一篇:ASP.NET個性化

加QQ羣啦,易百教程官方技術學習羣

QQ羣名稱

羣號

人數

免費

等級

羣介紹

JAVA技術

227270512

2000

LV5

Java基礎,JSP(Servlet),JAVA框架,Java高併發架構,Maven等等

MySQL/SQL

418407075

2000

LV5

SQL基礎,MySQL基礎,MySQL存儲過程,視圖,觸發器等等

大數據開發

655154550

2000

LV5

Spark,zookeeper,kafka,CDH,hive,fulme,hbase等Hadoop雲計算生態圈技術

Python技術

287904175

2000

LV5

Python編程,Python Web,Python大數據,Python爬蟲,自然語言處理等

Linux技術

479429477

2000

LV1

Redhat/Centos,Ubuntu,Shell,運維,監控等技術

PHP/Web開發者

460153241

1000

LV0

PHP基礎,PHP高級,網站優化/架構,JS,HTML,JQuery,前端等Web開發技術

人工智能

456236082

1000

LV0

人工智能,深度學習,算法等技術

Oracle數據庫

175248146

1000

LV0

SQL基礎,Oracle基礎,Oracle存儲過程,視圖,觸發器等等

Android開發

159629185

1000

LV0

Android開發,Android Studio,Kotlin,Dagger等技術

微軟技術

579821706

1000

LV0

C#,ASP.Net,VB.Net,ADO.Net,SQL Server,VBA,Excel等技術