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