資源描述:
《asp.net開(kāi)發(fā)大全第11章.用戶(hù)控件和自定義控件》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、第11章用戶(hù)控件和自定義控件在ASP.NET中,系統(tǒng)自帶的服務(wù)器控件為應(yīng)用程序開(kāi)發(fā)提供了諸多便利。在應(yīng)用程序開(kāi)發(fā)中,許多功能都需要重復(fù)使用,而如果在應(yīng)用程序開(kāi)發(fā)中重復(fù)的編寫(xiě)類(lèi)似的代碼是非常沒(méi)有必要的。ASP.NET讓開(kāi)發(fā)人員可以自行開(kāi)發(fā)用戶(hù)控件和自定義控件以提升代碼的復(fù)用性,本章即將講解用戶(hù)控件和自定義控件的開(kāi)發(fā)和使用。11.1用戶(hù)控件在ASP編程中,開(kāi)發(fā)人員經(jīng)常使用Include方式包含其他文件從而簡(jiǎn)化編程過(guò)程。而在ASP.NET中,控件能夠提高應(yīng)用程序中代碼的復(fù)用性,不僅ASP.NET提供了服務(wù)器控件,ASP.NE
2、T還支持用戶(hù)自定義控件,從而提高了代碼的復(fù)用性。11.1.1什么是用戶(hù)控件用戶(hù)控件使開(kāi)發(fā)人員能夠根據(jù)應(yīng)用程序的需求,方便的定義和編寫(xiě)控件。開(kāi)發(fā)所使用的編程技術(shù)將與編寫(xiě)Web窗體的技術(shù)相同,只要開(kāi)發(fā)人員對(duì)控件進(jìn)行修改,就可以將使用該控件的頁(yè)面的所有控件都進(jìn)行更改。為了確保用戶(hù)控件不會(huì)被修改、下載,被當(dāng)成一個(gè)獨(dú)立的Web窗體來(lái)運(yùn)行,用戶(hù)控件的后綴名為.ascx,當(dāng)用戶(hù)訪(fǎng)問(wèn)頁(yè)面時(shí),用戶(hù)控件是不能被用戶(hù)直接訪(fǎng)問(wèn)的。注意:雖然.ascx文件會(huì)阻止用戶(hù)的直接訪(fǎng)問(wèn),但是一些常用的下載工具還是能夠下載.ascx文件。11.1.2編寫(xiě)一
3、個(gè)簡(jiǎn)單的控件用戶(hù)控件是以.ascx為后綴名的,在VisualStudio2008中,可以通過(guò)【添加新項(xiàng)】選項(xiàng)創(chuàng)建一個(gè)用戶(hù)控件,如圖11-1所示。圖11-1創(chuàng)建用戶(hù)控件312用戶(hù)控件創(chuàng)建完畢后,會(huì)生成一個(gè).ascx頁(yè)面。.ascx頁(yè)面結(jié)構(gòu)同.aspx頁(yè)面基本沒(méi)有什么區(qū)別。在解決方案管理器中可以打開(kāi).aspx頁(yè)面和.ascx頁(yè)面進(jìn)行對(duì)比,其結(jié)構(gòu)并沒(méi)有太大的變化,如圖11-2和圖11-3所示。圖11-2創(chuàng)建一個(gè)用戶(hù)控件圖11-3用戶(hù)控件的結(jié)構(gòu)用戶(hù)控件中并沒(méi)有“
”等標(biāo)記,因?yàn)?ascx頁(yè)面作為控件被引用
4、到其他頁(yè)面,引用的頁(yè)面(如.aspx頁(yè)面)其中已經(jīng)包含
等標(biāo)記。而如果控件中使用這樣的標(biāo)記,可能會(huì)造成頁(yè)面布局混亂。用戶(hù)控件創(chuàng)建完成后,.ascx頁(yè)面代碼如下所示。<%@ControlLanguage="C#"AutoEventWireup="true"CodeBehind="mycontrol.ascx.cs"Inherits="_11_1.mycontrol"%>其中沒(méi)有任何的“”等標(biāo)記,而.ascx.cs頁(yè)面代碼基本同.aspx相同,示例代碼如下所示。usingSys
5、tem;//使用系統(tǒng)命名空間usingSystem.Collections;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Web;//使用Web命名空間usingSystem.Web.Security;usingSystem.Web.UI;//使用UI命名控件usingSystem.Web.UI.HtmlControls;//使用Html控件命名空間usingSystem.Web.UI.WebControls;//使用We
6、b控件命名空間usingSystem.Web.UI.WebControls.WebParts;usingSystem.Xml.Linq;//使用LINQ命名空間namespace_11_1{publicpartialclassmycontrol:System.Web.UI.UserControl//從控件類(lèi)派生{protectedvoidPage_Load(objectsender,EventArgse)//頁(yè)面加載方法{}}}用戶(hù)控件能夠提高復(fù)用性,前面介紹的服務(wù)器控件,從很多情況下來(lái)說(shuō)都可以看作是用戶(hù)控件的一種。當(dāng)
7、網(wǎng)站需要登錄框時(shí),不可能在每個(gè)需要登錄的地方都重新編寫(xiě)一個(gè)登錄框,最好的方法是每個(gè)頁(yè)面都能夠引用一個(gè)登錄框。當(dāng)需要對(duì)登錄312框進(jìn)行修改時(shí),可以一次性的將所有的頁(yè)面都修改完畢,而不需要對(duì)每個(gè)頁(yè)面都修改登錄框。要達(dá)到這種目的,使用用戶(hù)控件是最好不錯(cuò)的了。.ascx頁(yè)面允許開(kāi)發(fā)人員拖動(dòng)服務(wù)器控件,并編寫(xiě)相應(yīng)的樣式來(lái)實(shí)現(xiàn)用戶(hù)控件,同時(shí)用戶(hù)控件也能夠支持事件、方法、委托等高級(jí)編程。編寫(xiě)一個(gè)用戶(hù)登錄窗口,可以通過(guò)幾個(gè)TextBox控件和Button控件來(lái)實(shí)現(xiàn),示例代碼如下所示。<%@ControlLanguage="C#"Aut
8、oEventWireup="true"CodeBehind="mycontrol.ascx.cs"Inherits="_11_1.mycontrol"%>