在頁面輸出 HTML 前,向 <head> 註冊樹狀節點所需 CSS 樣式,避免重複輸出。
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",
"");
}
}
class 套用 TreeNodeStyleString/SelectedNodeStyleString,減少 inline style 體積。Page.Header 存在與否,自動切換現代/傳統註冊方式。ID 避免多個 TreeView 實例重複註冊相同樣式。OnLoad 早於 Render,RegisterClientScriptBlock 仍有效。| ASP.NET 版本 | Header 控制項 | 註冊方式 |
|---|---|---|
| 1.0 / 1.1 | 不支援 | RegisterClientScriptBlock |
| 2.0+ | 支援 | Header.Controls.Add(HtmlGenericControl) |