WEB开发网
开发学院软件开发C语言 C#发现之旅 - 高性能ASP.NET树状列表控件(中) 阅读

C#发现之旅 - 高性能ASP.NET树状列表控件(中)

 2010-09-30 21:03:16 来源:WEB开发网   
核心提示: 当用户展开一个节点而导致动态加载子节点时,其他的JavaSciprt代码会设置节点的XMLSource属性值到这个名为 “SkyTreeViewControlTempXML”的XML数据岛的src属性上,C#发现之旅 - 高性能ASP.NET树状列表控件(中)(2),这会

当用户展开一个节点而导致动态加载子节点时,其他的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 3 4 5 6 7  下一页

Tags:发现 之旅 高性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接