asp.net控件,

asp.net本身提供了很多控件,提供給我們這些比較懶惰的人使用,我認爲控件的作用就在此,因爲我們不想重複工作,所以要創建它,這個本身便是一個需求的關係,所以學習控件開發很有意思.

wrox網站上有本書 Professional ASP.NET 2.0 Server Control and Component Development

現在還沒有出版,但網站上放出了代碼,所以正好下載過來學習一下.

我看過前幾章代碼,環環相扣,作者用不同的知識向我們展示同一個效果,所以循序漸進的學下來很有好處.

雖然自己對控件開發還不是很熟悉,但我感覺以下幾點很重要,是我自己總結的

1.瞭解控件之間的繼承關係

  最好是先看看看System.Web.UI命名空間

(1)Control 類,所有的控件都共享的一個類,你需要去看下其裏面受保護的幾個方法和屬性,雖然一下看不完,以後會發現常常用到這些方法

大家可以在MSDN看一下其派生類

(2)HtmlTextWriter 類

不得不瞭解的一個類,主要工作就是我們寫的標記字符和文本輸出

2.重寫方法

(1) 必須繼承Control類 (2) 重寫Control類的Render方法,這個是必須的,因爲其他控件都繼承了Control 類類,所以幾乎所有控件都有這個方法

3.熟悉元數據

大家都知道asp.net控件屬性在編輯器上是分類的,如外觀,行爲,佈局等,每個屬性還給出瞭解釋

簡單的元數據就是起到這個作用,當然你也可以不加,但使用了元數據讓人感到有親切感,寫法如 下 [CategoryAttribute("Appearance")]

要使用元數據,必須引用System.ComponentModel命名控件,一般你如果寫組件的話,不可能不用到這樣類庫。具體的MSDN上有所介紹。

一.輸出字符串 說多了沒意思,還是來演練吧。首先你得了解HTML。來看下面代碼,效果就是輸出HTML到客戶端

示例一

 

效果很簡單,其實就一直在輸出HTML再加幾個屬性,大家可以直接把代碼放在App_Code文件夾裏,就可自動編譯,當然也可以創建web控件庫. 注意要繼承Control類,重寫Render方法,用HtmlTextWriter類的Write輸出HTML

使用控件

(1).需要先註冊一下

<%@ Register TagPrefix="custom" Namespace="CustomComponents" %>

(2) 然後就使用標籤輸出效果

<custom:CreditCardForm1 runat="server" ID="ccf" />

下爲效果圖

二.改善,加入屬性和元數據

可能上面做出的 控件毫無用處,但卻可以讓你熟悉一下步驟,上面的控件定的很死,沒有定義任何屬性,用處不大,下面來改造

我們來定義常用屬性,然後再輸出,這樣我們就可以修改控件的屬性了,

示例二

 

上面我們接觸到了元數據了,意思應該很好理解,爲了測試元數據的作用,大家可以新建一個類庫項目,然後把寫的代碼放這個項目裏面,接着web網站引用這個項目,成功生成以後,你會發現工具箱已經自動幫你加上了這幾個控件

 

接着你要做的工作就是拖動你需要的控件,然後你會在屬性面板看到下圖

然後你再結合代碼中的元數據,應該就知道大概意思了.(可以根據你的理解結合MSDN看)

三.再次改善,淘汰用Write方法以字符串的方式輸出HTML 接着我們繼續發現問題,我們發現我們除了定義幾個需要自己來修改的屬性外,還是要用來大量的字符串用來輸出HTML,而且容易輸錯.所以HtmlTextWriter類提供幾個有用的方法用來代替.

(1)AddStyleAttribute方法 爲標籤添加樣式屬性 (2)AddAttribute方法        爲標籤添加屬性 (3)RenderBeginTag          開始寫入標籤頭 如<table....> (4)RenderEndTag            寫入標籤尾部,如</table>

這裏有幾點需要特別注意.

一.因爲其定義方式跟我們平時定義方式不同,我們平時寫HTML時,是先寫標籤開頭,再寫標籤的屬性.如<table borderwidth="0">,然而我們在使用上面幾個方法時,需要有先後順序,我們需要先定義標籤的屬性和樣式,然後再輸出標籤頭.

二.標籤頭和尾,需一一對應.可以理解爲嵌套關係.最好的理解方法就是輸出代碼後,查看源文件,再結合原來定義的代碼來看.

還是看代碼比較容易說明,由於CreditCardForm2已經定義了我們需要的屬性,而我們現在要做的只是用標籤的形式來替代字符串的形式,所以只需要繼承CreditCardForm2類,重寫Render方法即可

示例三

 

實現的效果雖然一樣,但上面的代碼是不是漂亮很多,而且不容易輸錯.這也是所提倡的做法

四.未使用視圖狀態的後果

還是視圖狀態,關於視圖狀態大家可以參考MSDN和相關文章

看以下的示例,還是CreditCardForm3這個控件

 

if (!IsPostBack)     {       creditcardform.CardholderNameText = "Full Name";       creditcardform.CreditCardNoText = "CreditCardNo";       creditcardform.ExpirationDateText = "ExpirationDate";       creditcardform.PaymentMethodText = "Payment Options";       creditcardform.SubmitButtonText = "Send";     }

 

首次加載效果

點擊按鈕以後

 

五.使用視圖狀態改善效果

前提條件是你未禁用視圖狀態

繼承CreditCardForm3,改寫每個屬性

 

以上全爲個人見解,如有錯誤,希望大家指出.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章