日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Asp.net控件开发学习笔记(三)-控件开发基础

發(fā)布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.net控件开发学习笔记(三)-控件开发基础 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?封裝

???? asp.net中,控件被分為兩類.用戶控件和自定義服務(wù)器控件。前者就是我們經(jīng)常用來將一些可復(fù)用的內(nèi)容封裝成的.ascx文件。這里主要研究后者.

?

創(chuàng)建自定義服務(wù)器控件

???? 創(chuàng)建自定義控件的第一步是選擇以哪一個類作為基類來創(chuàng)建控件,Asp.net最常見的幾個基類羅列如下:

l?System.Web.UI.Control:這是所有控件的基類,所有作為控件的類都必須直接或者間接的繼承此類,此類僅僅提供最少量的屬性和方法。

l?System.Web.UI.WebControls.WebControl:這個類繼承于Control類,在實(shí)現(xiàn)控件最基本的屬性和方法后,又額外提供了控件CSS樣式相關(guān)的一系列屬性。如果是UI控件,那肯定就選它了.

l?System.Web.UI.WebControls.Webpart:這個不用說了,看名字就知道是提供了WebPart相關(guān)的功能.

l?System.Web.UI.WebControls.CompositeControl:如果需要創(chuàng)建復(fù)合控件(即那些控件內(nèi)部還有其他控件,比如Calender,選擇這個類作為基類.

l?System.Web.UI.WebControls.DatabindingControl:用于作為數(shù)據(jù)源相關(guān)控件的基類。

l?System.Web.UI.WebControls.CompositeDatabindingControl:這個基類可以看做上面兩個基類的結(jié)合,提供了上面兩個基類的功能,GridView就是繼承自這個基類.

?

簡單控件Or復(fù)合控件

???? 先來了解一下簡單控件和復(fù)合控件的定義:

?

???? 簡單控件:那些直接生成(render)對應(yīng)HTML的控件,比如BottonTextBox控件.

???? 復(fù)合控件:如何生成HTML依賴于其子控件,比如Reperater,FormView.

?

下面的圖示會讓概念更加清晰:
?

?


?? 簡單控件是那些比較簡單的更加,往往是一個控件對應(yīng)一個
HTML標(biāo)簽.但缺點(diǎn)顯而易見,就是當(dāng)面對大量HTML代碼片段時,就會顯得更加難以維護(hù).

復(fù)合控件在面對大量HTML代碼片段時就顯得游刃有余了,在遵守了面向?qū)ο蟪橄蠛头庋b的原則上,復(fù)合控件的維護(hù)性和易用性都不錯.

?

Demo:創(chuàng)建一個簡單的服務(wù)器控件:

??? 這里我們創(chuàng)建一個簡單的菜單自定義服務(wù)器控件。通過繼承最基礎(chǔ)的System.Web.UI.Control基類。然后覆蓋Render方法來達(dá)到自定義輸出的目的,代碼如下:

?

?namespace SimpleControl

{?

?? [ToolboxData("<{0}:menucustomcontrol runat=server></{0}:menucustomcontrol>")]

??? public class MenuCustomControl : Control

??? {

??????? protected override void Render(HtmlTextWriter writer)

??????? {

??????????? base.Render(writer);

??????????? writer.WriteLine("<div>");

??????????? RenderMenuItem(writer, "網(wǎng)易", "http://www.163.com");

??????????? writer.Write(" | ");

??????????? RenderMenuItem(writer, "新浪", "http://www.sina.com");

??????????? writer.Write(" | ");

??????????? RenderMenuItem(writer, "MSDN", "http://msdn.microsoft.com");

??????????? writer.Write(" | ");

??????????? RenderMenuItem(writer, "ASP.NET", "http://asp.net");

??????????? writer.WriteLine("</div>");

??????? }

??????? private void RenderMenuItem(HtmlTextWriter writer, string title, string url)

??????? {

??????????? writer.Write("<span><a href=""");

??????????? writer.Write(url);

??????????? writer.Write(""">");

??????????? writer.Write(title);

??????????? writer.WriteLine("</a><span>");

??????? }

??? }

}

通過HtmlTextWriter類,我們可以在控件原有的基礎(chǔ)上,加入我們自己想加入的內(nèi)容,注意base.Render(writer);方法,通過調(diào)用父類的Render方法,我們可以再實(shí)現(xiàn)父類的基礎(chǔ)上,加入我們額外的內(nèi)容(很像設(shè)計(jì)模式里的裝飾模式)

?

控件使用方法:

??Ok,控件完成了.使用方法很簡單,只需要在頁面頭部添加如下代碼引入控件即可:

<%@ Register TagPrefix="sc" Namespace="SimpleControl" %>

在使用時就像使用用戶控件一樣,在頁面注冊完成后,系統(tǒng)會自動搜索命名空間內(nèi)的直接或間接繼承于Control基類的控件,在前臺使用時,會自動出現(xiàn)智能提示:

代碼如下:

<sc:MenuCustomControl runat="server"></sc:MenuCustomControl>

頁面執(zhí)行,效果如下:

?


????? Demo2:
繼承現(xiàn)有控件

?

??????? 在很多情況下,我們并不需要重新發(fā)明輪子,我們可以通過繼承來利用現(xiàn)有控件的特性并額外添加我們需要的功能達(dá)到復(fù)用的目的.先看一下效果:

????


?? 通過繼承
TextBox控件,并添加額外的Enable3d屬性,使現(xiàn)有控件擁有額外的屬性。前臺代碼摘錄如下:

???? 我是3D的:<sc:TextBox3d runat="server"></sc:TextBox3d><br />

??? 我不是:<sc:TextBox3d runat="server" Enable3D="false"></sc:TextBox3d>

?

后臺代碼如下:

??? [ToolboxData("<{0}:textbox3d runat=server></{0}:textbox3d>")]

??? public class TextBox3d : TextBox// 繼承自TextBox

??? {

??????? public TextBox3d()

??????? {

??????? Enable3D = true;

??????? }

???????

??????? public bool Enable3D

??????? {

??????????? get

??????????? {

??????????? object enable3D = ViewState["Enable3D"];

??????????? if (enable3D == null)

??????????? return false;

??????????? else

??????????? return (bool)enable3D;

??????????? }

??????????? set

??????????? {

??????????????? ViewState["Enable3D"] = value;

??????????? }

??????? }

??????? protected override void Render(HtmlTextWriter output)

??????? {

??????? if (Enable3D)

??????? output.AddStyleAttribute("FILTER", "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true'");

??????? base.Render(output);

??????? }

??? }

?

標(biāo)簽(Attribute)

也許你已經(jīng)對上面代碼的[ToolboxData("<{0}:textbox3d runat=server></{0}:textbox3d>")]感到很迷惑,其實(shí)這是C#特有的一種類型。Attribute的本質(zhì)是一種用于修改其他類的屬性或方法的類,其實(shí)Attribute本身就是一種類,所有的Attribute都會直接或者間接的繼承于System.Attribute,像接口的名稱往往以大寫的I開頭一樣,標(biāo)簽的結(jié)尾習(xí)慣上以Attribute結(jié)尾,這樣可以增加可讀性.簡單的示例如下:

public class SampleAttribute : Attribute

??? {

}

注意,所有的標(biāo)簽(Attribute)都必須被聲明為public.

在使用時可以像這樣:

public class SampleClass

??? {

??????? [SampleAttribute]

??????? public virtual void SampleMethod()

??????? {

??????????? //...

??????? }

}

?? 在應(yīng)用的時候,你可以針對一個類,方法或者屬性應(yīng)用好幾個Attribute.應(yīng)用方法可以將這些都寫入一個方括號中,就像這樣:

[DefaultProperty("Text"), toolboxdata("<{0}:mylabel runat=server></{0}:mylabel>")]

也可以分別寫在幾個不同的方括號中,就像這樣:

??? [DefaultProperty("Text")]

??? [ToolboxData("<{0}:mylabel runat=server></{0}:mylabel>")]

Visual Studio控件開發(fā)常用的標(biāo)簽(Attribute)

在利用Visual Studio進(jìn)行控件開發(fā)時,利用Attribute特性可以讓空間更加智能,比如當(dāng)你雙擊控件時,默認(rèn)會進(jìn)入控件的哪個事件的EventHandler,或者當(dāng)你從ToolBox里拽過來你開發(fā)的控件,默認(rèn)在前臺會生成什么樣的代碼片段等.這些都可以利用Attribute做到.這些常用的屬性都被定義在System.ComponentModel命名空間中,下面是這個命名空間里的常用的Attribute.

Attribute

描述

BindableAttribute

Indicates whether or not a property supports two-way

data binding

BrowsableAttribute

Indicates whether or not a property or event should be listed in a property browser

DefaultEvent

Specifies the name of the default event for a class

DescriptionAttribute

Allows the property browser to display a brief description of a property

ToolboxData

Specifies default values for control attributes and customizes the initial HTML content

EditorAttribute

Associates a UI type editor with a property

DefaultProperty

Specifies the name of the default property for a class

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/CareySon/archive/2009/10/02/1577402.html

總結(jié)

以上是生活随笔為你收集整理的Asp.net控件开发学习笔记(三)-控件开发基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。