先來介紹下WebControl類
WebControl類:
WebControl 類從 Control 派生,用作定義 System.Web.UI.WebControls 命名空間中的所有控件的公共方法、屬性和事件的基類。提供所有 Web 服務器控件的公共屬性、方法和事件。通過設置在此類中定義的屬性,可以控制 Web 服務器控件的外觀和行為。主要的屬性有:AccessKey、Attributes、 Width、Height等。此外,一個從 WebControl 派生的控件也自行參與到 ASP.NET 的主題功能。WebControl類的屬性和方法詳細的內容可以參看MSDN。
這裡再簡單的說下WebControl和HtmlContrlol的區別:
Web控件和Html控件雖然好多功能相同並且長得很像,但是它們的內部實現機制是完全不一樣的。
Web控件具有回送功能,能夠用ViewState維持控件的狀態。Html控件則不能,當點擊頁面的操作,其狀態就會丟失。(ViewState後面會有講解)
Html控件與Web控件最大的區別是它們對事件處理的方法不同。對於Html窗體控件,當引發一個事件時,浏覽器會處理它。但對於Web控件,事件僅由浏覽器生成,但浏覽器不會處理它,客戶端要給服務器發個信息,告訴服務器處理事件。 不過有些事件,
比如:按下鍵/移動/鼠標等事件,Asp.net中沒有這些事件(因為這些事件即時性強,服務器處理得不夠及時),這時候Html控件就發揮其作用了,結合Html事件協助完成。
有的資料上說:Web控件要比Html控件執行效率要好。這個沒有太好的依據,僅供大家參考,高手也可以談談自己的想法。
自己動手:
這裡我們不像上篇文章那樣,簡單的創建一個類庫工程,而是直接創建ASP.NET服務器控件項目。
VS2008會自動的為我們生成如下代碼:
namespace SelfServerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")]
public class MyControl : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}