C#发现之旅 - 高性能ASP.NET树状列表控件(中)
2010-09-30 21:03:16 来源:WEB开发网在这里程序会判断控件的GenerateAtServer和DynamicLoadChildNodes 的属性值,若WEB控件不是在服务器端生成HTML代码或者允许在客户端动态加载子列表就会输出第二段HTML代码。
在输出第二段HTML代码时,首先会输出一个名为“SkyTreeViewControlXSLT”的XML数据岛元素,该数据岛内容来自函数 “ReadXSLTString”,该函数就是简单的从一个名为“SkyTreeViewControl.xslt”的嵌入式程序集资源中读取所有的文本内容。
此处还输出一个为“RefreshSkyTreeViewControl”的JavaScript函数,用于初始化一个树状列表,其参数就是树状列表的编号。也就是“myTreeView”,“myTreeView2”之类的控件客户端编号。在JavaScript函数中,首先获得第三个XML数据岛,获得树状节点定义信息XML文档,然后和“SkyTreeViewControlXSLT”数据岛中的XSLT文档执行XSLT转换,生成HTML字符串,然后调用HTML元素的“innerHTML”属性向HTML文档填充刚刚生成的HTML代码,从而展现出一个树状结构。
本过程配套使用的“ReadXSLTString”函数的代码为
private static string strXSLString = null;
/// <summary>
/// 从程序集资源文件SkyTreeViewControl.xslt中加载XSLT代码。
/// </summary>
/// <returns>加载的XSLT代码字符串</returns>
private string ReadXSLTString()
{
if (strXSLString == null)
{
foreach (string name in this.GetType().Assembly.GetManifestResourceNames())
{
// 查询程序集中所有的嵌入的资源的名称,找到以"SkyTreeViewControl.xslt"
// 结尾的程序集资源并以UTF8的文本编码格式加载其中的文本内容。
// 程序集资源的全名为“程序集默认名称空间.保存文件的各级目录.文件名”
// 其中文件名中不能出现下划线。
if (name.EndsWith(".SkyTreeViewControl.xslt"))
{
using (System.IO.Stream stream =
this.GetType().Assembly.GetManifestResourceStream(name))
{
System.IO.StreamReader reader = new System.IO.StreamReader(
stream,
System.Text.Encoding.UTF8);
strXSLString = reader.ReadToEnd();
}
return strXSLString;
}
}
throw new Exception("未找到程序集资源SkyTreeViewControl.xslt");
}
return strXSLString;
}
更多精彩
赞助商链接