ASP.NET立即上手教程(14)_.Net教程
推薦:ASP.NET立即上手教程(13)利用商務(wù)對(duì)象來(lái)工作 在商務(wù)組件中封裝邏輯是實(shí)際應(yīng)用程序,比如基于web的應(yīng)用以及其他應(yīng)用中,必不可少的部分。在A(yíng)SP.NET中,商務(wù)對(duì)象是多層WEB應(yīng)用程序內(nèi)建的塊。 應(yīng)用程序的 /Bin目錄
創(chuàng)作自定義服務(wù)器控件
本章的內(nèi)容演示高級(jí)開(kāi)發(fā)者如何書(shū)寫(xiě)ASP.NET頁(yè)面中的服務(wù)器控件。通過(guò)書(shū)寫(xiě)自定義的服務(wù)器控件,可以封裝定制的用戶(hù)接口以及其他功能。本教程通過(guò)一系列逐漸展開(kāi)的例子提供了創(chuàng)作自定義控件的入門(mén)知識(shí)。關(guān)于控件創(chuàng)作的更多信息,參閱.NET Framework SDK文檔中“開(kāi)發(fā)ASP.NET服務(wù)器控件”部分。
重要提示:本章表述的控件盡管可以在A(yíng)SP.NET頁(yè)面的運(yùn)行時(shí)刻正常運(yùn)行,但是在頁(yè)面開(kāi)發(fā)工具,如Microsoft Visual Studio.NET,設(shè)計(jì)時(shí)卻有可能無(wú)法正常工作。為了在設(shè)計(jì)器中正常工作,自定義控件需要應(yīng)用設(shè)計(jì)時(shí)刻屬性----該屬性在本章不進(jìn)行表述。關(guān)于設(shè)計(jì)時(shí)刻屬性的細(xì)節(jié),參閱SDK文檔中“組件的設(shè)計(jì)時(shí)刻屬性”部分。
開(kāi)發(fā)一個(gè)簡(jiǎn)單的自定義控件
開(kāi)始創(chuàng)作自己的ASP.NET服務(wù)器控件其實(shí)很容易。要想建立一個(gè)自定義控件,你需要做的全部工作僅僅是定義一個(gè)從System.Web.UI.Control繼承而來(lái)得類(lèi),并且覆蓋它的Render方法。Render方法帶有一個(gè)System.Web.UI.HtmlTextWriter類(lèi)型的參數(shù)�?丶枰l(fā)送到客戶(hù)端的HTML代碼作為字符串參數(shù)傳遞給HtmlTextWriter的Write方法。
定義簡(jiǎn)單的屬性
屬性類(lèi)似于“聰明”的字段,它具有存取器方法。你可能從你的控件中expose屬性而不是公共字段,因?yàn)閷傩栽试S數(shù)據(jù)隱藏,可以版本控制,并且可以被可視化設(shè)計(jì)工具所支持。屬性具有g(shù)et/set存取器方法,用來(lái)設(shè)置和取得屬性值,并允許在必要的時(shí)候執(zhí)行額外的程序邏輯。
下面的例子展示如何增加簡(jiǎn)單的屬性,它對(duì)應(yīng)私有數(shù)據(jù)類(lèi)型,如整數(shù)、布爾和字符串。這個(gè)例子定義了三個(gè)屬性:Message是字符串類(lèi)型、MessageSize是枚舉類(lèi)型、Iterations是整數(shù)類(lèi)型的。請(qǐng)注意設(shè)置簡(jiǎn)單屬性和枚舉屬性的ASP.NET頁(yè)面語(yǔ)法。
定義類(lèi)屬性
如果類(lèi)A的屬性類(lèi)型是類(lèi)B,那么B的屬性被稱(chēng)為A的子屬性。下面的例子定義了一個(gè)自定義服務(wù)器控件SimpleSubProperty,它有一個(gè)Format類(lèi)型的屬性。Format是一個(gè)具有兩個(gè)私有屬性的類(lèi):Color和Size ,他們依次成為了SimpleSubProperty的子屬性
注意ASP.NET具有特定的語(yǔ)法來(lái)設(shè)定子屬性。下面的代碼顯示了如何顯式設(shè)置SimpleSubProperty的子屬性Format.Color和Format.Size。“-”語(yǔ)法表示子屬性。
<SimpleControlSamples:SimpleSubProperty Message="Hello There" Format-Color="red" Format-Size="3" runat=server/>
找回內(nèi)部的內(nèi)容
每個(gè)控件都有一個(gè)從System.Web.UI.Control繼承的Controls屬性。這是一個(gè)集合屬性,表示控件的子控件。如果一個(gè)控件沒(méi)有用ParseChildrenAttribute或者ParseChildrenAttribute(ChildrenAsProperties = false)標(biāo)識(shí),那么當(dāng)控件在頁(yè)面中聲明的時(shí)候,ASP.NET頁(yè)面框架就會(huì)應(yīng)用下面的解析邏輯。如果解析器在控件的標(biāo)簽中遇到嵌套控件,它就會(huì)建立控件實(shí)例,并將其添加到控件的Controls屬性。標(biāo)簽間的文字文本被添加為L(zhǎng)iteralControl。任何其他嵌套元素產(chǎn)生一個(gè)解析錯(cuò)誤。
下面的例子展示了一個(gè)自定義控件SimpleInnerContent,通過(guò)檢查L(zhǎng)iteralControl是否被添加到它的控件集合中,來(lái)決定是否將交付的文本增加到它的標(biāo)簽之間。如果是,它就取得LiteralControl的Text屬性,然后將其添加到輸出字符串。
重要提示:如果你的自定義控件從WebControl衍生而來(lái),它將不會(huì)有上面例子中描述的解析邏輯,因?yàn)閃ebControl用ParseChildrenAttribute(ChildrenAsProperties = true)標(biāo)記,它導(dǎo)致不同的解析邏輯。關(guān)于ParseChildrenAttribute的更多信息,請(qǐng)參閱.NET Framework SDK文檔。
開(kāi)發(fā)復(fù)合控件
你可以使用類(lèi)的合成,通過(guò)組合現(xiàn)在有的控件來(lái)創(chuàng)作新的控件。復(fù)合控件類(lèi)似于用戶(hù)控件,也是使用ASP.NET語(yǔ)法來(lái)創(chuàng)建。用戶(hù)控件和復(fù)合控件的主要區(qū)別是:用戶(hù)控件是擴(kuò)展名為.ascx的文本文件,而組合控件是編譯過(guò)的,已匯編的方式使用。
開(kāi)發(fā)組合控件的關(guān)鍵步驟是:
· 覆蓋從Control繼承的保護(hù)型方法CreateChildControls,建立子控件的實(shí)例,并將其添加到控件集合。
· 如果頁(yè)面中的復(fù)合控件實(shí)例需要重復(fù)創(chuàng)建,需要引入System.Web.UI.INamingContainer接口。這是一個(gè)沒(méi)有方法的標(biāo)簽接口。當(dāng)他被控件引入的時(shí)候,ASP.NET將在這個(gè)控件下面建立一個(gè)新的名稱(chēng)空間。這就保證了子控件在控件的繼承樹(shù)中具有唯一的ID。
你不必覆蓋Render方法,因?yàn)樽涌丶峁┝私桓哆壿�。你可以引申子控件合成的屬性�?/p>
下面的例子定義了一個(gè)復(fù)合控件Composition1,它合并了System.Web.UI.LiteralControl和System.Web.UIWebControls.TextBox.Composition1,引申了一個(gè)整數(shù)類(lèi)型的自定義屬性Value,映射TextBox到的Text屬性。
分享:ASP.NET立即上手教程(12)數(shù)據(jù)訪(fǎng)問(wèn)和定制 模板控件介紹 前面幾個(gè)章節(jié)演示的DataGrid控件,對(duì)于許多需要使用類(lèi)似表格那樣來(lái)展示數(shù)據(jù)的web應(yīng)用程序來(lái)說(shuō)是非常適合的。但許多時(shí)候,需要用更豐富的形式來(lái)顯示數(shù)據(jù)。Asp.n
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶(hù)端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 帶你走進(jìn)ASP.NET(2)
- 淺析8月編程語(yǔ)言榜:.Net前景如何?
- 菜鳥(niǎo)也學(xué)習(xí)ASP.NET如何讀取數(shù)據(jù)庫(kù)內(nèi)容
- ADO.Net 類(lèi)型化DataSet的簡(jiǎn)單介紹
- 小議優(yōu)化ASP.NET應(yīng)用性能之Cache篇
- asp.net url重寫(xiě)的好處與方法
- 近期的幾個(gè)ASP.NET開(kāi)發(fā)經(jīng)驗(yàn)總結(jié)和收集
- 從ASP.NET 1.1升級(jí)到ASP.NET 2.0要考慮的Cookie問(wèn)題
- 如何創(chuàng)建安全的Web應(yīng)用程序
- ASP.NET中的狀態(tài)管理
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET立即上手教程(14)
。