首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 高效能開發實戰:ASP.NET 樹狀列表控件渲染管線與 ViewState 管理(中)

     編輯:關於C語言

伺服器端 XSLT 轉換輸出 HTML

當 GenerateAtServer=true 時,控件在伺服器端完成 HTML 生成。核心流程:

  1. 呼叫 ReadXSLTString() 從嵌入資源載入 XSLT 模板字串,載入為 XmlDocument。
  2. 將根節點 XML 序列化字串載入另一 XmlDocument(NodeXmlDocument)。
  3. 建立 XslCompiledTransform 轉換引擎,載入 XSLT 模板。
  4. 執行 Transform(),結果輸出至 StringWriter。
  5. 將產出的 HTML 字串透過 RenderContent 的 writer 參數直接寫入回應流。

客戶端渲染模式:XML 資料島 + 啟動腳本

若非伺服器端生成 HTML,則改為客戶端動態生成。控件輸出三段關鍵內容:

1. 容器佔位與載入提示

writer.Write("<span id='" + this.ClientID + "_container'>正在載入,請稍候<img src='...' /></span>");

2. XML 資料島內嵌節點資料

writer.Write("<xml id='" + this.ClientID + "_xml'>" + xml + "</xml>");

3. 啟動腳本註冊

this.Page.ClientScript.RegisterStartupScript(
  this.GetType(),
  "SkyTreeViewControl_Init_" + this.ClientID,
  @"<script language=JavaScript>
    RefreshSkyTreeViewControl('" + this.ClientID + @"');
  </script>"
);

頁面載入時立即呼叫 RefreshSkyTreeViewControl 初始化樹狀列表。

ViewState 狀態管理實作

控件將節點集合 myNodes 保存在 ViewState 中,實現跨回發保持狀態:

protected override object SaveViewState() {
  this.ViewState["nodes"] = this.myNodes;
  return base.SaveViewState();
}

protected override void LoadViewState(object savedState) {
  myNodes = this.ViewState["nodes"] as SkyTreeNodeList;
  base.LoadViewState(savedState);
}

此機制確保樹狀結構在 PostBack 後仍能維持展開/摺疊狀態與節點資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved