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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

控件的呈现方法(Rendering)的内核

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 控件的呈现方法(Rendering)的内核 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Asp.net中所有的控件都是從System.Web.UI.Control類,在control類中定義了三個與呈現有關的方法,分別是Render方法,RenderChildren方法和RenderControl方法.其中RenderControl方法是public的方法,先看看這三個方法的實現:
Public void RenderControl(HtmlTextWriter writer)
{
?//判斷Visible屬性是否為真,如果是,則調用Render方法呈現控件,否則不呈現控件
?if(Visible)
?{
??Render(writer);
?}
}

Protected virtual void Render(HtmlTextWriter writer)
{
?//在這里寫呈現控件本身的代碼
?…….
?//調用RenderChildren方法呈現該控件的子控件
?RenderChildren(writer);
}

Protected virtual void RenderChildren(HtmlTextWriter writer)
{
?//循環調用每個子控件中的RenderControl方法呈現子控件,遞歸實現呈現整個頁面的控件樹
?foreach(Control c in Controls)
?{
????? c.RenderControl(writer);
}
}

???????? RenderControl方法用于供外部類進行調用,以生成控件,如父控件調用子控件的Rendercontrol方法.在RenderControl方法只是作了是否顯示該控件的判斷,如果顯示則調用控件的被保護方法Render.
Render方法是呈現控件的核心方法,在現實性自定義控件中,我們一般都是通過重寫Render方法來呈現控件的,如果控件是一個容器控件,就要重寫RenderChildren方法來呈現子控件.

???????? 所有的服務端控件都是從System.Web.UI.WebControl中派生.而WebControl又從Control中派生,所以WebControl具有上述的三個方法,但是又增加了幾個方法,它把Render方法又細分成三個方法:RenderBgeginTag,RenderContents,RenderEndTag.Render的實現代碼如下:
Protected override void Render(HtmlTextWriter writer)
{
?//呈現開始標簽
?RenderBgeginTag(writer);
?//呈現標簽的內容
?RenderContents(writer);
?//呈現結束標簽
?RenderEndTag(writer);
}

Public virtual void RenderBeginTag(HtmlTextWriter writer)
{
?//調用AddAttributesToRender方法,添加標簽的屬性
?AddAttributesToRender(writer);
?//判斷呈現的標簽是否為已知的標簽;
?HtmlTextWriterTag tagkey=TagKey;
?If (tagkey!=HtmlTextWriterTag.Unknown)
?{
??Writer.RenderBeginTag(tagkey);
?}
?Else
?{
??//未知標簽,則使用指定的標簽名TagName屬性
??Writer.RenderBeginTag(this.TagName);
?}
}

Protected virtual void RenderContents(HtmlTextWriter writer)
{
???? //如果要呈現子控件,就要調用基類的Render方法
???? base.Render(writer);
}

????????? 看這幾個方法,我覺得好象沒有多大的必要把render方法分解成三個方法,這樣僅對于一呈現單個標簽的控件才有意義,對于復合的控件似乎沒什么意義,還增加了復雜度.
總結:
1.如果從Control中派生,則應重載Render()方法呈現控件.如果控件是一個容器控件,則應在render方法中調用基類的base.RenderChildren()方法,呈現子控件.
2.如果從Webcontrol類中派生,分兩種情況,一種是利用TagKey屬性生成輸出的html標簽,這時應重載RenderContents()方法來呈現控件.第二種是不想呈現默認的的用TagKey生成的html標簽,這時應重載Render()方法來呈現控件,如下代碼所示:
Protected virtual void Render(HtmlTextWriter writer)
{
?
?//在這里寫呈現控件本身的代碼
?AddAttributesToRender(writer);
?RenderContents(writer);
}

Protected virtual void RenderContents(HtmlTextWriter writer)
{
?????? //呈現本控件代碼
?….

?????? //如果要呈現子控件,就要調用基類的Render方法
?????? base.Render(writer);
}
3.如果從Webcontrol類中派生,并且該控件是一個容器控件,則應在RenderContents中調用base.Render()方法,以呈現子控件.

總結

以上是生活随笔為你收集整理的控件的呈现方法(Rendering)的内核的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。