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

C# 發現之旅:高效能 ASP.NET TreeView 控制項 (上) — OnLoad 樣式註冊與 Header 控制

     編輯:關於C語言

OnLoad 覆寫目的

在頁面輸出 HTML 前,向 <head> 註冊樹狀節點所需 CSS 樣式,避免重複輸出。

完整 OnLoad 實作


protected override void OnLoad(EventArgs e) {
    base.OnLoad(e);

    string styleHtml = "\r\n.SkyTreeViewControl_TreeNode { " + this.TreeNodeStyleString + "}"
                     + "\r\n.SkyTreeViewControl_SelectedNode{" + this.SelectedNodeStyleString + "}\r\n";

    if (this.Page.Header != null) {
        // ASP.NET 2.0+ 支援 Header 控制項集合
        bool found = false;
        foreach (Control ctl in this.Page.Header.Controls) {
            if (ctl.ID == "SkyTreeViewControl_Style") { found = true; break; }
        }
        if (!found) {
            HtmlGenericControl style = new HtmlGenericControl("style");
            style.ID = "SkyTreeViewControl_Style";
            style.InnerHtml = styleHtml;
            this.Page.Header.Controls.Add(style);
        }
    } else {
        // ASP.NET 1.x 回退:使用 RegisterClientScriptBlock
        this.Page.ClientScript.RegisterClientScriptBlock(
            this.GetType(),
            "SkyTreeViewControl_Style",
            "");
    }
}

設計考量

  1. 樣式隔離:以 class 套用 TreeNodeStyleString/SelectedNodeStyleString,減少 inline style 體積。
  2. 相容性:偵測 Page.Header 存在與否,自動切換現代/傳統註冊方式。
  3. 去重:檢查 ID 避免多個 TreeView 實例重複註冊相同樣式。
  4. 時機正確:OnLoad 早於 Render,RegisterClientScriptBlock 仍有效。

適用版本對照

ASP.NET 版本Header 控制項註冊方式
1.0 / 1.1不支援RegisterClientScriptBlock
2.0+支援Header.Controls.Add(HtmlGenericControl)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved