ASP.NET立即上手教程(7)

來源:互聯網
上載者:User

Web Forms 使用者控制項

使用者控制項介紹

除了ASP.NET提供的內建的伺服器控制項外,你還可以使用已經掌握的製作WEB FORMS 頁面的技術,輕鬆的定義自己的控制項。實際上,只需要稍微改動一下,幾乎任何WEB FORMS頁面都可以作為伺服器控制項,在其他頁面上重複使用。(注意使用者控制項的類型是System.Web.UI.UserControl, 它直接從System.Web.UI.Control繼承而來)。 Web Forms 頁面被作為伺服器控制項使用的時候,簡稱為使用者控制項。轉變之後,通常使用.ascx副檔名來表明使用者控制項。這就保證了使用者控制項檔案不能作為一個單獨的web form頁面來執行(你可以明白,在使用者控制項和web forms 頁面之間,有一點,但是很重要的區別)。使用者控制項使用Register(註冊)指令包含在Web Forms 頁面中:

<%@ Register TagPrefix="Acme" TagName="Message" Src="pagelet1.ascx" %>

TagPrefix 為使用者控制項確定了唯一的名稱空間。(這樣,具有相同名字的多個使用者控制項可以互相區分). TagName 的值是使用者控制項的唯一名稱(你可以使用任何名字)。 Src 屬性是使用者控制項的虛擬路徑—例如"MyPagelet.ascx" 或者 "/MyApp/Include/MyPagelet.ascx"。 註冊使用者控制項之後,你可以在web forms頁面中放置使用者控制項標籤,就像是用平常的伺服器控制項一樣(包含runat="server" 屬性):

<Acme:Message runat="server"/>

下面的例子展示了web forms頁面引入使用者控制項的情況。本例中的使用者控制項僅僅是一個簡單的靜態檔案。

擴充使用者控制項的屬性

當web forms頁面作為使用者控制項處理的時候,web forms頁面的公用欄位和方法升級為公用屬性(即標籤屬性)和公用方法(標籤的方法)。下面的例子將上一個例子中的使用者控制項進行延伸,增加了兩個公用 String欄位。注意這兩個欄位既可以在包含頁中直接聲明,也可以用程式來控制。

除了將公用欄位升級為控制項屬性外,也可以使用屬性文法。 使用屬性文法勝過為了設定或者取得屬性值而執行代碼。下面的例子示範了一個Address 使用者控制項,他綁定了TextBox 控制項的text 屬性。這樣做的好處在於該控制項“免費”繼承了TextBox 控制項的自動狀態管理。注意在包含web forms頁面中有兩個Address 使用者控制項,分別為"Billing Address" 和 "Shipping Address" 設定Caption 屬性。使用者控制項的真正強大之處就是這種重複利用。

使用者控制項的另一個有用之處是 Login 控制項,用來收集使用者名稱和密碼。

在這個例子中,伺服器驗證控制項添加到了Login使用者控制項中

在使用者控制項中封裝事件

如同普通的伺服器控制項一樣,使用者控制項參與整個請求執行的生命週期。這就意味著,使用者控制項能夠操作自己的事件,從包含web forms頁中封裝某些頁面邏輯。

下面的例子示範了一個產品列表使用者控制項,它在內部處理了自己的提交返回。注意使用者控制項自身沒有綁定<form runat="server">控制項。因為只有一個表單控制項出現在頁面上(asp.net不允許嵌套伺服器表單),於是留給包含web forms 頁面去定義他。

用程式建立使用者控制項

如同普通伺服器控制項可以用程式建立一樣,使用者控制項也一樣。頁面的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 集合中。

重要提示 對於包含使用者控制項的web forms 頁面,只有當Register 命令包含了使用者控制項(即使沒有使用者控制項標籤被實際聲明),使用者控制項的強型別才是可利用的。

本章小結

1、使用者控制項允許開發人員使用建立web forms頁面所使用的程式設計技術,輕鬆的建立自訂控制項。

2、作為與普通頁面的區別,使用.ascx 副檔名來表明使用者控制項。這就保證了使用者控制項不能像標準web forms頁面那樣執行。

3、使用Register 命令,將使用者控制項包含在web forms頁面中。Register 命令指定了TagPrefix, TagName, 和Src location。

4、註冊了使用者控制項之後,就可以像對待普通伺服器控制項那樣,使用使用者控制項(包含runat="server" 屬性)。

5、使用者控制項被包含在web forms 頁面中以後,他的公用欄位、屬性和方法升級為控制項的公用屬性(標籤屬性)和方法。

6、使用者控制項參與每個用戶端請求的整個生命週期,並且處理自身的事件,封裝了部分包含他的web forms頁面的頁面邏輯。

7、使用者控制項不能包含任何form控制項。如果需要的話,可以在包含他的web form頁面中使用form控制項。

8、使用者控制項可以用System.Web.UI.Page類的LoadControl方法用用程式來建立。使用者控制項的類型由Control 命令的ClassName 屬性所決定。

9、對於包含使用者控制項的web forms 頁面,只有當Register 命令包含了使用者控制項(即使沒有使用者控制項標籤被實際聲明),使用者控制項的強型別才是可利用的。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。