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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】Asp.net控件开发学习笔记整理篇 - WebControl基类

發(fā)布時(shí)間:2025/3/17 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】Asp.net控件开发学习笔记整理篇 - WebControl基类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近一直在做MVC項(xiàng)目,對于WEBFORM 好像快忘記了。周末無聊,順帶看看他人的筆記。再次溫習(xí)下。

復(fù)習(xí)大綱:

導(dǎo)航、頁面生命周期及其它導(dǎo)論

一、服務(wù)器控件生命周期

二、控件開發(fā)基礎(chǔ)

三、Asp.net服務(wù)端狀態(tài)管理

四、Asp.net客戶端狀態(tài)管理

五、數(shù)據(jù)回傳

六、WebControl基類

七、服務(wù)器控件事件

?

?

WebControl基類

?????在Asp.net控件開發(fā)中,WebControl基類給我們提供了對于控件的Style更加靈活的解決方案,因?yàn)樵赟ystem.Web.UI.Control基類中只能手動(dòng)的輸入呈現(xiàn)在客戶端的代碼,但如果開發(fā)的服務(wù)器控件對style的要求較高。那Control基類的局限性就顯而易見了,而繼承WebControl類作為基類將會(huì)是很好的選擇。

???? System.web.UI.WebControls.Webcontrol直接繼承與Control類。在繼承了Control的特性的基礎(chǔ)上,WebControl基類不僅在生成客戶端html使用了另一種更好的render方式,并且還提供了對于老版本瀏覽器的兼容。

?

WebControl的ControlStyle屬性

?

?????ControlStyle屬性其實(shí)是System.Web.UI.WebControls.Style的一個(gè)實(shí)例,這個(gè)屬性用于讀取或者設(shè)置常用的CSS類,以下是System.Web.UI.WebControls.Style的屬性和CSS屬性的對應(yīng)關(guān)系。

Style的屬性

CSS標(biāo)準(zhǔn)屬性

BackColor

background-color

BorderColor

border-color

BorderStyle

border-style

BorderWidth

border-width

CssClass

CSS的類名

Font

Font weight, style, family, and so on

ForeColor

color

Height

height

width

width

?

而在ControlStyle.Font是一些設(shè)置字體的屬性,是System.Web.UI.FontInfo對象的實(shí)例。和標(biāo)準(zhǔn)CSS屬性的對照如下表:

?

Font?屬性

CSS標(biāo)準(zhǔn)屬性

Bold

font-weight: bold

Italic

font-style: italic

Name

font-family

Names

font-family

Overline

text-decoration: overline

Underline

text-decoration: underline

Size

font-size

Strikeout

text-decoration: line-through

?

WebControl基類ControlStyle屬性的簡化

???下面這行代碼:

??????webcontrol.ControlStyle.BorderWidth = 1;和?webcontrol.BorderWidth = 1;

代碼是等價(jià)的,WebControl基類可以不通過ControlStyle屬性而訪問ControlStyle內(nèi)的成員,這樣在前臺(tái)可以直接對控件進(jìn)行style設(shè)置,剛才的后臺(tái)代碼于如下前臺(tái)代碼是等價(jià)的:

<cc:WebControl?id="WebControl"?runat="server"?borderwidth="1"/>

WebControlStyle屬性

因?yàn)镃ontrolStyle屬性只暴露了一部分可用于操控CSS的屬性,而除了上述ControlStyle暴露的基本的CSS屬性設(shè)置之外,WebControl基類還為我們提供了Style屬性用于對CSS進(jìn)行精確完整的操作,可以用如下圖讓概念更加清晰:

Style屬性是System.Web.UI.CssStyleCollection這個(gè)類的實(shí)例,style屬性大多在.aspx文件中用到,比如:

<asp:Button?ID="Button1"?runat="server"?Text="Button"?style="?background:blue;"???/>

而與上面對Style賦值等價(jià)的后臺(tái)代碼則是:

Button1.Style["background"] =?"blue";

或者

Button1.Style.Add("background",?"blue");

?

一個(gè)新的Render系統(tǒng)

???和集成Control并重寫Render方法不同,WebControl給我們提供了一個(gè)新的系統(tǒng)用于Render控件。下面寫一個(gè)Label的Demo:

Demo:label控件

代碼如下:

??? [ToolboxData("<{0}:label runat=server></{0}:label>"),DefaultProperty("Text")]

????public?class?Label?:?WebControl

??? {

????????public?Label():?base(HtmlTextWriterTag.Span)

??????? {

??????? }

????????public?virtual?string?Text

??????? {

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

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

????????????????object?text = ViewState["Text"];

????????????????if?(text ==?null)

????????????????????return?string.Empty;

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

????????????????????return?(string)text;

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

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

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

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

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

??????? }

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

??????? {

??????????? writer.Write(Text);

??????? }

?}

?在構(gòu)造函數(shù)中,我們可以看出public?Label():?base(HtmlTextWriterTag.Span)和從前繼承于Control基類的方式有所不同,通過HtmlTextWriterTag枚舉對象,我們所有生成的內(nèi)容都會(huì)在Html的<span>標(biāo)簽內(nèi).而在最后用RednerContents函數(shù)來render內(nèi)容時(shí)并不需要自己寫相應(yīng)的html標(biāo)簽,而是構(gòu)造函數(shù)內(nèi)的選擇了span,則webcontrol幫你生成相應(yīng)的html標(biāo)簽。

?

?WebControl本身內(nèi)置的render系統(tǒng)分為四個(gè)函數(shù),依次進(jìn)行,可以用下圖表示:?


其中AddAttributesToRender函數(shù)在后面說到,根據(jù)順序我們可以發(fā)現(xiàn),WebControl在生成Html方面要大大強(qiáng)于Control基類的生成方式。就這個(gè)Label控件來說,生成的過程會(huì)是

1:RenderBeginTag

根據(jù)HtmlTextWriterTag枚舉類型來確定生成的html標(biāo)簽的種類,在這里這個(gè)方法會(huì)生成

<span

2:AddAttributesToRender函數(shù)生成控件相關(guān)的html屬性在這里可能會(huì)接著上面生成

<span title=”xx”

3:renderContents函數(shù)生成控件中的內(nèi)容,在這個(gè)Label控件會(huì)接著生成類似如下:

<span title=”xx”>這里是文本內(nèi)容

4:RenderEndTag這個(gè)函數(shù)也是根據(jù)HtmlTextWriteTag枚舉來確定生成的html關(guān)閉標(biāo)簽,在這里會(huì)接著上面生成:

<span title=”xx”>這里是文本內(nèi)容</span>

?

因?yàn)樵谶@個(gè)Demo中我們只覆蓋了RenderContents函數(shù),而沒有涉及到AddAttributesToRedner函數(shù),而RenderBeginTag和RenderEndTag會(huì)根據(jù)基類構(gòu)造函數(shù)中的HtmlTextWriterTag枚舉類型生成相應(yīng)的html標(biāo)簽.如果在前臺(tái)這么用這個(gè)控件:

<asp:Label?runat="server"?Text="測試Text"></asp:Label>

?

則render后生成相應(yīng)的Html代碼是:

<span>測試Text</span>

?

?

這樣的render方式.可以讓你省去手動(dòng)輸入html,而只需要重載你需要自己實(shí)現(xiàn)的步驟。在通常情況下RenderBeginTag和RenderEndTag幾乎很少被重載。而被重載最多的也就是AddAttributeToRender和RenderContents方法.

?

AddAttributeToRender方法

??AddAttributeToRender方法是最常用的,這個(gè)方法通過鍵/值對添加屬性,比如前幾章的TextBox控件,如果Render的過程中引入了這個(gè)方法,那么會(huì)容易很多.頁面的Render部分只需要如下一些代碼即可:

???

????????public?Textbox():?base(HtmlTextWriterTag.Input)

??????? {

?

??????? }

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

??????? {

??????????? writer.AddAttribute("type",?"text");

??????????? writer.AddAttribute("name", UniqueID);

??????????? writer.AddAttribute("value", Text);

????????????base.AddAttributesToRender(writer);

??????? }

需要特別注意的是,在override?? AddAttributesToRedner方法時(shí),一定不要忘了加上最后的那句base.AddAttributesToRender(writer);

?

轉(zhuǎn)載于:https://www.cnblogs.com/taoqianbao/p/3486237.html

總結(jié)

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

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