web forms 用戶控件
用戶控件介紹
除了asp.net提供的內(nèi)建的服務(wù)器控件外,你還可以使用已經(jīng)掌握的制作web forms 頁面的技術(shù),輕松的定義自己的控件。實際上,只需要稍微改動一下,幾乎任何web forms頁面都可以作為服務(wù)器控件,在其他頁面上重復(fù)使用。(注意用戶控件的類型是system.web.ui.usercontrol, 它直接從system.web.ui.control繼承而來)。 web forms 頁面被作為服務(wù)器控件使用的時候,簡稱為用戶控件。轉(zhuǎn)變之后,通常使用.ascx擴展名來表明用戶控件。這就保證了用戶控件文件不能作為一個單獨的web form頁面來執(zhí)行(你可以明白,在用戶控件和web forms 頁面之間,有一點,但是很重要的區(qū)別)。用戶控件使用register(注冊)指令包含在web forms 頁面中:
<%@ register tagprefix="acme" tagname="message" src="pagelet1.ascx" %>
tagprefix 為用戶控件確定了唯一的名稱空間。(這樣,具有相同名字的多個用戶控件可以互相區(qū)分). tagname 的值是用戶控件的唯一名稱(你可以使用任何名字)。 src 屬性是用戶控件的虛擬路徑—例如"mypagelet.ascx" 或者 "/myapp/include/mypagelet.ascx"。 注冊用戶控件之后,你可以在web forms頁面中放置用戶控件標(biāo)簽,就像是用平常的服務(wù)器控件一樣(包含runat="server" 屬性):
<acme:message runat="server"/>
下面的例子展示了web forms頁面引入用戶控件的情況。本例中的用戶控件僅僅是一個簡單的靜態(tài)文件。
擴展用戶控件的屬性
當(dāng)web forms頁面作為用戶控件處理的時候,web forms頁面的公共字段和方法升級為公共屬性(即標(biāo)簽屬性)和公共方法(標(biāo)簽的方法)。下面的例子將上一個例子中的用戶控件進行延伸,增加了兩個公共 string字段。注意這兩個字段既可以在包含頁中直接聲明,也可以用程序來控制。
除了將公共字段升級為控件屬性外,也可以使用屬性語法。 使用屬性語法勝過為了設(shè)定或者取得屬性值而執(zhí)行代碼。下面的例子示范了一個address 用戶控件,他綁定了textbox 控件的text 屬性。這樣做的好處在于該控件“免費”繼承了textbox 控件的自動狀態(tài)管理。注意在包含web forms頁面中有兩個address 用戶控件,分別為"billing address" 和 "shipping address" 設(shè)置caption 屬性。用戶控件的真正強大之處就是這種重復(fù)利用。
用戶控件的另一個有用之處是 login 控件,用來收集用戶名和密碼。
在這個例子中,服務(wù)器驗證控件添加到了login用戶控件中
在用戶控件中封裝事件
如同普通的服務(wù)器控件一樣,用戶控件參與整個請求執(zhí)行的生命周期。這就意味著,用戶控件能夠操作自己的事件,從包含web forms頁中封裝某些頁面邏輯。
下面的例子演示了一個產(chǎn)品列表用戶控件,它在內(nèi)部處理了自己的提交返回。注意用戶控件自身沒有綁定<form runat="server">控件。因為只有一個表單控件出現(xiàn)在頁面上(asp.net不允許嵌套服務(wù)器表單),于是留給包含web forms 頁面去定義他。
用程序創(chuàng)建用戶控件
如同普通服務(wù)器控件可以用程序創(chuàng)建一樣,用戶控件也一樣。頁面的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, 所以為了設(shè)置用戶控件的個別屬性,它必須拋出適當(dāng)?shù)膹婎愋汀W罱K,用戶控件加入到基本頁面的controlcollection 集合中。
重要提示 對于包含用戶控件的web forms 頁面,只有當(dāng)register 命令包含了用戶控件(即使沒有用戶控件標(biāo)簽被實際聲明),用戶控件的強類型才是可利用的。
本章小結(jié)
1、用戶控件允許開發(fā)者使用創(chuàng)建web forms頁面所使用的程序設(shè)計技術(shù),輕松的創(chuàng)建自定義控件。
2、作為與普通頁面的區(qū)別,使用.ascx 文件擴展名來表明用戶控件。這就保證了用戶控件不能像標(biāo)準(zhǔn)web forms頁面那樣執(zhí)行。
3、使用register 命令,將用戶控件包含在web forms頁面中。register 命令指定了tagprefix, tagname, 和src location。
4、注冊了用戶控件之后,就可以像對待普通服務(wù)器控件那樣,使用用戶控件(包含runat="server" 屬性)。
5、用戶控件被包含在web forms 頁面中以后,他的公共字段、屬性和方法升級為控件的公共屬性(標(biāo)簽屬性)和方法。
6、用戶控件參與每個客戶端請求的整個生命周期,并且處理自身的事件,封裝了部分包含他的web forms頁面的頁面邏輯。
7、用戶控件不能包含任何form控件。如果需要的話,可以在包含他的web form頁面中使用form控件。
8、用戶控件可以用system.web.ui.page類的loadcontrol方法用用程序來創(chuàng)建。用戶控件的類型由control 命令的classname 屬性所決定。
9、對于包含用戶控件的web forms 頁面,只有當(dāng)register 命令包含了用戶控件(即使沒有用戶控件標(biāo)簽被實際聲明),用戶控件的強類型才是可利用的。
國內(nèi)最大的酷站演示中心!新聞熱點
疑難解答
圖片精選