程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅-高性能ASP.NET樹狀列表控件(上)(13)

C#發現之旅-高性能ASP.NET樹狀列表控件(上)(13)

編輯:關於C語言

RenderContents 函數

控件的Rander函數調用了“base.Rander”函數,而“base.Rander”函數內部會調用RenderContents函數來輸出控件的內容。因此這裡控件重寫了RenderContents函數用來輸出詳細內容。這個函數是樹狀列表控件C#代碼的主要內容。

本函數的第一個部分就是判斷控件是否處於設計模式,也就是判斷控件是否運行在VS.Net的Web窗體設計器中,其代碼如下

if( base.Page.Site != null )
{
    if( base.Page.Site.DesignMode )
    {
        // 若ASPX頁面是處於設計狀態,比如處於VS.Net集成開發環境的WEB表單設計器
        // 中,則本WEB控件不顯示實際內容,只是顯示控件的一些狀態。
        Type t = this.GetType();
        writer.WriteLine("<b>" + this.ID + "</b>" );
        writer.WriteLine("<br />Type=" + t.FullName );
        writer.WriteLine("<br />Version=" + t.Assembly.FullName );
        writer.WriteLine("<br />GenerateAtServer=" + this.GenerateAtServer );
        writer.WriteLine("<br />DynamicLoadChildNodes=" + this.DynamicLoadChildNodes );
        writer.WriteLine("<br />AutoScroll=" + this.AutoScroll );
        writer.WriteLine("<br />IndentXML=" + this.IndentXML );
        writer.WriteLine("<br />Yfyuan release at 2008-2-19");
        return ;
    }
}

在這裡判斷 base.Page.Site.DesignMode 屬性。若該屬性值為 true , 則表明控件處於設計模式,出現在VS.Net的窗體設計器中。此時控件就是簡單地輸出控件的名稱類型和一些重要屬性值。

若控件不處於設計器中,那就是真正的運行了。若允許客戶端動態加載子節點,則輸出支持動態加載子節點的HTML代碼塊,這裡使用了RegisterStartupscript函數。將在客戶端的form標簽結束前輸出這些Html代碼。

這裡要注意一下,在Render和RenderContents函數中調用RegisterClientscriptBlock函數是無意義的,因為早在任何WEB控件輸出前,form標簽已經開始並輸出了一些內容了,已經輸出的內容是不可更改的,因此Render或RenderContents中不能調用RegisterClientscriptBlock函數,而應當在控件的的OnLoad方法或Load事件處理中調用 RegisterClIEntscriptBlock函數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved