返回首頁
當前位置: 主頁 > 網絡編程 > .Net實例教程 >

ASP.NET-自定義控件

時間:2020-01-16 16:01來源:知行網www.f1globe.com 編輯:麥田守望者

 ASP.NET允許用戶創建控件。這些用戶定義的控件分為以下幾類:

  • 用戶控件
  • 自定義控件

用戶控件

用戶控件的行為類似于微型ASP.NET頁面或Web表單,許多其他頁面也可以使用它。這些是從System.Web.UI.UserControl類派生的。這些控件具有以下特征:

  • 它們的擴展名為.ascx。
  • 它們可能不包含任何<html>,<body>或<form>標記。
  • 他們有一個Control指令而不是Page指令。

為了理解這個概念,讓我們創建一個簡單的用戶控件,該控件將用作網頁的頁腳。要創建和使用用戶控件,請執行以下步驟:

  • 創建一個新的Web應用程序。
  • 右鍵單擊解決方案資源管理器上的項目文件夾,然后選擇“添加新項”。新增項目
  • 從“添加新項”對話框中選擇“ Web用戶控件”,并將其命名為footer.ascx。最初,footer.ascx僅包含一個Control指令。

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs"     Inherits="customcontroldemo.footer" %>
  • 將以下代碼添加到文件中:

    <table>    <tr>       <td align="center"> Copyright ©2010 TutorialPoints Ltd.</td>    </tr>     <tr>       <td align="center"> Location: Hyderabad, A.P </td>    </tr> </table>

要將用戶控件添加到您的網頁,必須將Register指令和用戶控件的實例添加到該頁面。以下代碼顯示了內容文件:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %>     <%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>  <!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>          Untitled Page       </title>    </head>        <body>           <form id="form1" runat="server">          <div>                       <asp:Label ID="Label1" runat="server" Text="Welcome to ASP.Net Tutorials "></asp:Label>             <br />  <br />             <asp:Button ID="Button1" runat="server" onclick="Button1_Click"  Text="Copyright Info" />                       </div>          <Tfooter:footer ID="footer1" runat="server" />       </form>           </body> </html>

執行后,頁面將顯示頁腳,并且此控件可以在網站的所有頁面中使用。

自定義結果

請注意以下幾點:

(1) Register指令為控件指定標簽名稱和標簽前綴。

<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>

(2)在頁面上添加用戶控件時,應使用以下標記名稱和前綴:

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

自定義控件

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

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

為了理解這個概念,讓我們創建一個自定義控件,該控件將簡單地在瀏覽器中呈現文本消息。要創建此控件,請執行以下步驟:

創建一個新的網站。在“解決方案資源管理器”中,右鍵單擊樹頂部的解決方案(而非項目)。

解決方案資源管理器

在“新建項目”對話框中,從項目模板中選擇“ ASP.NET Server控件”。

項目模板

上面的步驟添加了一個新項目,并為該解決方案創建了一個完整的自定義控件,稱為ServerControl1。在此示例中,讓我們將項目命名為CustomControls。若要使用此控件,必須先將其添加為對網站的引用,然后才能在頁面上注冊它。要添加對現有項目的引用,請右鍵單擊該項目(不是解決方案),然后單擊“添加引用”。

從“添加引用”對話框的“項目”選項卡中選擇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屬性在瀏覽器上呈現,如下所示:

自定義服務器控件

使用自定義控件

在上一個示例中,設置了自定義控件的Text屬性的值。創建控件時,ASP.NET默認情況下添加了此屬性。控件文件后面的以下代碼揭示了這一點。

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);       }    } }

上面的代碼是為自定義控件自動生成的。事件和方法可以添加到自定義控件類中。

讓我們擴展以前的名為SeverControl1的自定義控件。讓我們給它一個名為checkpalindrome的方法,它使它有能力檢查回文。

回文指的是相反的單詞/文字。例如,馬拉雅拉姆語,夫人,薩拉等。

擴展自定義控件的代碼,其外觀應為:

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)       {          if (this.checkpanlindrome())          {             output.Write("This is a palindrome: <br />");             output.Write("<FONT size=5 color=Blue>");             output.Write("<B>");             output.Write(Text);             output.Write("</B>");             output.Write("</FONT>");          }          else          {             output.Write("This is not a palindrome: <br />");             output.Write("<FONT size=5 color=red>");             output.Write("<B>");             output.Write(Text);             output.Write("</B>");             output.Write("</FONT>");          }       }              protected bool checkpanlindrome()       {          if (this.Text != null)          {             String str = this.Text;             String strtoupper = Text.ToUpper();             char[] rev = strtoupper.ToCharArray();             Array.Reverse(rev);             String strrev = new String(rev);                          if (strtoupper == strrev)             {                return true;             }             else             {                return false;             }          }          else          {             return false;          }       }    } }

更改控件代碼時,必須通過單擊Build-> Build Solution來構建解決方案,以使更改反映在您的項目中。在頁面上添加一個文本框和一個按鈕控件,以便用戶可以提供文本,單擊該按鈕時將檢查回文。

<form id="form1" runat="server">    <div>       Enter a word:       <br />       <asp:TextBox ID="TextBox1" runat="server" style="width:198px"> </asp:TextBox>              <br /> <br />              <asp:Button ID="Button1" runat="server onclick="Button1_Click" Text="Check Palindrome" style="width:132px" />              <br /> <br />              <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" />    </div> </form>

按鈕的Click事件處理程序僅將文本從文本框復制到自定義控件的text屬性。

protected void Button1_Click(object sender, EventArgs e) {    this.ServerControl11.Text = this.TextBox1.Text; }

執行后,控件將成功檢查回文。

檢查回文

請注意以下幾點:

(1)當您添加對自定義控件的引用時,它會添加到工具箱中,您可以像其他任何控件一樣從工具箱中直接使用它。

定制控件參考

(2)自定義控件類的RenderContents方法在此處被覆蓋,因為您可以添加自己的方法和事件。

(3) RenderContents方法采用HtmlTextWriter類型的參數,該參數負責在瀏覽器上進行呈現。

------分隔線----------------------------
標簽(Tag):
------分隔線----------------------------
推薦內容
  • ASP.NET-個性化

    網站設計用于用戶的反復訪問。 個性化允許站點記住用戶身份和其他信息詳細信息,并為...

  • ASP.NET-自定義控件

    ASP.NET允許用戶創建控件。 這些用戶定義的控件分為以下幾類: 用戶控件 自定義控件 ...

  • ASP.NET-數據綁定

    每個ASP.NET Web表單控件都從其父Control類繼承DataBind方法,這使它具有將數據綁定到...

  • ASP.NET-數據源

    數據源控件與數據綁定控件進行交互,并隱藏復雜的數據綁定過程。 這些工具可將數據提...

  • ASP.NET-Ajax控件

    AJAX代表異步JavaScript和XML。 這是一種跨平臺技術,可加快響應時間。 AJAX服務器控...

  • ASP.NET-面板控件

    面板控件用作頁面上其他控件的容器。 它控制其包含的控件的外觀和可見性。 它還允許以...

猜你感興趣
99久久免费高清热精品