動態建立控制項建議放在 Page_Init,避免 ViewState 還原時機問題導致其他按鈕失效 (特別是 AjaxControlToolkit 控件)。
protected void Page_Init(object sender, EventArgs e)
{
var tabContainer = new TabContainer();
var tab1 = new TabPanel { HeaderText = "標籤1" };
var tab2 = new TabPanel { HeaderText = "標籤2" };
tabContainer.Tabs.Add(tab1);
tabContainer.Tabs.Add(tab2);
// 建立 Tab 內容:需實作 ITemplate
var panel1 = new Panel();
panel1.Controls.Add(new Label { Text = "這是第一個 Tab" });
var template1 = new TabContentTemplate();
template1.SetTemplate(panel1);
tab1.ContentTemplate = template1;
form1.Controls.Add(tabContainer);
}
public class TabContentTemplate : ITemplate
{
private Control _template;
public void SetTemplate(Control ctl) => _template = ctl;
public void InstantiateIn(Control container)
{
container.Controls.Add(_template);
}
}
使用 Page.LoadTemplate("Template.ascx") 載入使用者控制項作為 Template:
tab1.ContentTemplate = Page.LoadTemplate("Template.ascx");
適用於複雜版面,分離標記與邏輯。