新聞中心
當(dāng)用戶(hù)向請(qǐng)求一個(gè)頁(yè)面時(shí),服務(wù)器端會(huì)向客戶(hù)端發(fā)送一段文本,包括可顯示標(biāo)記字符和不可顯示的文本,當(dāng)這段文本到達(dá)客戶(hù)端后,再通過(guò)客戶(hù)端的瀏覽器(如IE)把可視化的標(biāo)記字符轉(zhuǎn)化為可視呈現(xiàn)給用戶(hù),所以在用戶(hù)請(qǐng)求一個(gè)aspx頁(yè)面時(shí),頁(yè)面上的Asp.net服務(wù)器控件,也會(huì)把文本寫(xiě)入到返回的文本流中,在本章中我們將講述這一過(guò)程,學(xué)習(xí)ASP.NET服務(wù)器控件編程的相關(guān)知識(shí)。

成都創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的徽縣網(wǎng)站建設(shè)公司,徽縣接單;提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行徽縣網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
ASP.NET服務(wù)器控件編程提供了4個(gè)有關(guān)呈現(xiàn)的方法,分別是Render、RenderChildren、RenderContents和RenderControl,這4個(gè)方法都有一個(gè)HtmlTextWriter類(lèi)型的參數(shù)。HtmlTextWriter的作用就是把標(biāo)記字符和文本寫(xiě)入倒Asp.net服務(wù)器控件流中,它是System.Web.UI名稱(chēng)空間所有標(biāo)記編寫(xiě)器的基類(lèi),包括ChtmlTextWriter、Html32TextWriter和XhtmlTextWriter,這些類(lèi)用于針對(duì)不同的標(biāo)記類(lèi)型編寫(xiě)元素、屬性、樣式和布局信息。
既然有4個(gè)有關(guān)呈現(xiàn)的方法,那它們的作用分別是什么?它們之間有什么區(qū)別呢?我們以一個(gè)控件的生成過(guò)程來(lái)說(shuō)明:
每個(gè)頁(yè)面都有一個(gè)控件樹(shù),代表本頁(yè)面所擁有的所有子控件,頁(yè)面控件就是控件樹(shù)的根,為了生成控件樹(shù),頁(yè)面將建立一個(gè)HtmlTextWriter類(lèi)的實(shí)例;在這個(gè)實(shí)例中封裝了相應(yīng)流,接著頁(yè)面會(huì)把HtmlTextWriter對(duì)象傳遞給RenderControl,RenderControl會(huì)檢查控件的Visible屬性是否為真,如果是真,RenderControl會(huì)調(diào)用Render方法,而Render方法會(huì)去調(diào)用RenderContents,RenderContents方法負(fù)責(zé)將控件的內(nèi)容呈現(xiàn)到指定的編寫(xiě)器中,如果控件有子控件的話(huà),Render方法又會(huì)把HtmlTextWriter傳遞給RenderChildren方法,RenderChildren方法負(fù)責(zé)生成控件的子控件。
我們以一個(gè)例子來(lái)說(shuō)明ASP.NET服務(wù)器控件編程的過(guò)程。
- public class Class1 : WebControl
- {
- protected override void Render
- (System.Web.UI.HtmlTextWriter writer)
- {
- writer.Write("RenderChildren〈br 〉");
- base.Render(writer);
- }
- protected override void RenderChildren
- (System.Web.UI.HtmlTextWriter writer)
- {
- writer.Write("RenderChildren〈br 〉");
- base.RenderChildren(writer);
- }
- public override void RenderControl
- (System.Web.UI.HtmlTextWriter writer)
- {
- writer.Write("RenderControl〈br 〉");
- base.RenderControl(writer);
- }
- protected override void RenderContents
- (System.Web.UI.HtmlTextWriter writer)
- {
- writer.Write("RenderContents〈br 〉");
- base.RenderContents(writer);
- }
- }
效果如下的圖1(RenderControl—〉Render—〉RenderContents—〉RenderChildren):
在A(yíng)SP.NET服務(wù)器控件編程中HtmlTextWrite的各種方法的參數(shù)取值用到三種枚舉類(lèi)型:HtmlTextWriteTag、HtmlTextWriteAttribute和HtmlTextWriteStyle,在這里不作詳細(xì)的講解,舉例如下,效果如上圖的圖2:
- [DefaultProperty("Text")]
- [ToolboxData("〈{0}:WebCustomControl1
- runat=server〉〈/{0}:WebCustomControl1〉")]
- public class WebCustomControl1 : WebControl
- {
- protected override void Render
- (HtmlTextWriter output)
- {
- // -----------------------------------------
- // ***種方式,通過(guò)Add + [Attribute、
- StyleAttribute、BeginTag\EndTag]
- // AddAttribute、AddStyleAttribute
- 在RenderBeginTag和RenderEndTag之前
- output.BeginRender(); // 開(kāi)始Render
- output.AddAttribute(HtmlTextWriterAttribute.
- Value, "This is input.");
- // 使用HtmlTextWriteAttribute枚舉
- output.AddStyleAttribute(HtmlTextWriterStyle.
- BackgroundColor, ColorTranslator.ToHtml
- (Color.GreenYellow));
- // 使用HtmlTextWriteStyle枚舉
- output.RenderBeginTag(HtmlTextWriterTag.Input);
- // 使用HtmlTextWriteTag枚舉
- output.RenderEndTag();
- output.EndRender(); // 結(jié)束Render
- // ------------------------------------------
- // -------------------------------------------
- // 第二種方式,通過(guò)Write + [Attribute、
- StyleAttribute、BeginTag\EndTag]
- // WriteAttribute、WriteStyleAttribute
- 在WriteBeginTag和WriteEndTag之間
- output.WriteBeginTag("input");
- // 直接標(biāo)記的名稱(chēng),不使用HtmlTextWriteTag枚舉
- output.WriteAttribute("value", "This is input too.");
- // 直接使用屬性名稱(chēng),不使用HtmlTextWriteAttribute枚舉
- output.Write(" style=\"");
- output.WriteStyleAttribute("background-color",
- ColorTranslator.ToHtml(Color.Lavender));
- // 直接使用樣式標(biāo)記,不使用HtmlTextWriteStyle枚舉
- output.Write("\"");
- output.Write(HtmlTextWriter.TagRightChar); // 添加“〉”標(biāo)記
- output.WriteEndTag("input");
- // -----------------------------------------------
- // 第二種適用于對(duì)html比較熟悉的朋友。
- }
- }
【編輯推薦】
- ASP.NET環(huán)境下的Shell函數(shù)
- 在A(yíng)SP.NET中向數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)
- ASP.NET用Post方式向網(wǎng)頁(yè)發(fā)送數(shù)據(jù)
- ASP.NET 2.0部署WEB應(yīng)用程序淺析
- ASP.NET中的HttpWorkerRequest對(duì)像
- 介紹ASP.NET MVC框架
本文題目:ASP.NET服務(wù)器控件編程淺析
轉(zhuǎn)載來(lái)于:http://m.fisionsoft.com.cn/article/djjgigi.html


咨詢(xún)
建站咨詢(xún)
