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

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

編輯:關於C語言

當用戶展開一個節點而導致動態加載子節點時,其他的JavaSciprt代碼會設置節點的XMLSource屬性值到這個名為 “SkyTreeViewControlTempXML”的XML數據島的src屬性上。這會導致IE浏覽器立即開始異步的加載XML文檔,並根據其文檔加載狀態而多次觸發“onreadystatechange”事件,從而調用Javascript函數 “SkyTreeVIEwControlDynamicLoadChildNodes”,在這個Javascript函數中,首先獲得XML數據島對象,然後判斷其狀態,若狀態值不等於“complete”時,則文檔還沒有完成加載,從而退出等待下一次調用。

若XML數據島完成加載後,獲得父節點的文本元素,然後獲得嵌入在HTML文檔中另外一個名為“SkyTreeVIEwControlXSLT”的 XML數據島,這個XML數據島包含了XSLT文檔。然後使用剛剛加載的XML文檔,調用它的“transfromNode”函數執行XSLT轉換,則轉換結果就是顯示子節點的HTML字符串。然後使用HTML元素的“insertAdjacentHTML”函數將生成的HTML字符串輸出到Html頁面上。

成功的動態加載子節點後,Javascript腳本還更新父節點的圖標,使其表示為展開狀態。

第二段Html代碼塊

WEB控件輸出完第一段HTML代碼後,會根據需要輸出第二段代碼,第二段代碼包含在客戶端執行XSLT轉換所需的XSLT模板代碼以及初始化生成樹狀列表的Html代碼的Javascript代碼,其C#代碼為

if( this.GenerateAtServer == false || this.DynamicLoadChildNodes )
{
    // 若允許動態加載子節點而且不是在服務器段生成Html代碼
    // 則輸出動態加載子節點使用的Javascript代碼
    if (!base.Page.ClIEntscript.IsStartupscriptRegistered( 
         this.GetType() ,
         "SkyTreeVIEwControlXSLT"))
        {
        // 輸出第二段Html代碼塊
        base.Page.ClIEntscript.RegisterStartupscript( 
            this.GetType() ,
            "SkyTreeVIEwControlXSLT" , 
            @"
< !-- 使用一個XML數據島保存客戶端動態生成Html代碼時使用的XSLT代碼-->
<XML id='SkyTreeVIEwControlXSLT'>" 
            + ReadXSLTString() // 此處從資源文件SkyTreeVIEwControl.xslt中獲得XSLT代碼
            + @"</XML>

<script language=Javascript>

//--------------- 生成樹狀列表--------------------------------------
// 參數id 就是樹狀列表控件的編號
function RefreshSkyTreeVIEwControl( id )
{
    var xml = document.getElementById( id + '_XML');
    var xsl = document.getElementById( 'SkyTreeVIEwControlXSLT');
    var container = document.getElementById( id + '_container'  );
    if( container == null )
    {
        alert('未找到目標');
        return ;
    }
    if( container != null )
    {
        if( XML == null )
        {
            container.innerText = '缺失XML數據';
            return ;
        }
        if( xsl == null )
        {
            container.innerText = '缺失XSLT數據';
            return ;
        }
        var Html = xml.XMLDocument.transformNode( xsl.XMLDocument );
        container.innerHTML = Html ;
    }
}//function RefreshSkyTreeVIEwControl( id )

< /script>"
        );
    }
}

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