1。使用者控制項介紹
除了 ASP.NET 提供的內建伺服器控制項外,還可以使用已學會的編寫 Web Form頁的相同編程技巧輕鬆地定義自己的控制項。實際上,只需做少量的修改,幾乎任何 Web Form頁即可在其他頁中作為伺服器控制項重用(注意,使用者控制項是 System.Web.UI.UserControl 類型,該類型直接從 System.Web.UI.Control 繼承)。用作伺服器控制項的 Web Form頁簡稱為使用者控制項。作為約定,使用 .ascx 副檔名指示這樣的控制項。這樣可以確保使用者控制項的檔案不能作為獨立的 Web Form頁執行(您會略微發現在使用者控制項和 Web Form頁之間有很少但很重要的差異)。使用者控制項通過 Register 指令包括在 Web Form頁中。
<%@ Register TagPrefix="Acme" TagName="Message" Src="pagelet1.ascx" %>
TagPrefix 確定使用者控制項的唯一命名空間(以便多個同名的使用者控制項可以相互區分)。TagName 是使用者控制項的唯一名稱(可以選擇任何名稱)。Src 屬性是使用者控制項的虛擬路徑,例如“MyPagelet.ascx”或“/MyApp/Include/MyPagelet.ascx”。註冊了使用者控制項後,可以像放置普通的伺服器控制項那樣,將使用者控制項標記放置在 Web Form頁中(包括 runat="server" 屬性):
<Acme:Message runat="server"/>
2。公開使用者控制項屬性
當 Web Form頁被視為控制項時,該 Web Form的公用欄位和方法也被提升為此控制項的公用屬性(即標記屬性)和方法。
除了將公用欄位提升為控制項屬性外,還可以使用屬性文法。屬性文法具有能夠在設定或檢索屬性時執行代碼的優點。
3。在使用者控制項中封裝事件
使用者控制項參與請求的整個執行生存期,方式與普通的伺服器控制項類似。這意味著使用者控制項可以處理自己的事件,並封裝來自包含 Web Form頁的一些頁邏輯。注意,使用者控制項本身不具有封裝它的 <form runat="server"> 控制項。由於一頁上只能有一個表單控制項(ASP.NET 不允許嵌套的伺服器表單),因此需要包含 Web Form頁負責定義該控制項。
4。以編程方式建立使用者控制項
正如可以編程方式建立普通的伺服器控制項一樣,也可以這樣建立使用者控制項。頁的 LoadControl 方法用於載入使用者控制項,並傳遞使用者控制項源檔案的虛擬路徑:
Control c1 = LoadControl("pagelet7.ascx");
((Pagelet7CS)c1).Category = "business";
Page.Controls.Add(c1);
使用者控制項的類型由 Control 指令上的 ClassName 屬性決定。例如,以檔案名稱“pagelet7.ascx”儲存的使用者控制項被分配強型別“Pagelet7CS”,如下所示:
<%@ Control ClassName="Pagelet7CS" %>
由於
LoadControl 方法返回
System.Web.UI.Control 類型,因此必須將其轉換為適當的強型別以便設定控制項的各屬性。最後,使用者控制項被添加到基頁的
ControlCollection。
重要說明 只有當為使用者控制項包括了 Register 指令時,使用者控制項的強型別才能由包含 Web Form頁使用(即使沒有實際聲明的使用者控制項標記)。
小結
- 使用者控制項使開發人員能夠使用編寫 Web Form頁的相同編程技巧輕鬆地定義自訂控制項。
- 作為約定,用 .ascx 副檔名指示這樣的控制項。這樣可以確保使用者控制項檔案不能作為獨立的 Web Form頁執行。
- 使用者控制項通過 Register 指令包括在另一 Web Form頁中,該指令指定 TagPrefix、TagName 和 Src location。
- 註冊了使用者控制項後,可以像普通的伺服器控制項那樣將使用者控制項標記放置在 Web Form頁中(包括 runat="server" 屬性)。
- 在包含 Web Form頁中將使用者控制項的公用欄位、屬性和方法提升為該控制項的公用屬性(標記屬性)和方法。
- 使用者控制項參與每個請求的整個執行生存期,並且可以處理自己的事件,封裝來自包含 Web Form頁的一些頁邏輯。
- 使用者控制項不應包含任何表單控制項,而應依靠其包含 Web Form頁在必要時包括表單控制項。
- 可以使用 System.Web.UI.Page 類的 LoadControl 方法以編程方式建立使用者控制項。使用者控制項的類型由 ASP.NET 運行庫決定,遵循約定檔案名稱_副檔名。
- 只有當為使用者控制項包括了 Register 指令時,使用者控制項的強型別才能由包含 Web Form頁使用(即使沒有實際聲明的使用者控制項標記)。