0

我必须在后面的代码中向我的项目母版页添加一些控件,但即使在回发后我也想保留它们。我该怎么做?我已经搜索过了,我认为我必须使用 preinit ,但我不知道如何,也不知道母版页是否有 preinit。

<form id="form1" runat="server">
    <asp:ScriptManager ID="MainScriptmanager" runat="server" EnablePartialRendering="true" />
    <asp:UpdatePanel ID="MasterContentUpdatePanel" runat="server" UpdateMode="conditional">
        <ContentTemplate>
            <asp:TabContainer ID="MainTabContainer" runat="server" ActiveTabIndex="1" TabStripPlacement="Bottom">
            </asp:TabContainer>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
</form>


  protected void Button1_Click(object sender, EventArgs e)
    {
        tabCount = tabCount + 1;
        AjaxControlToolkit.TabPanel tab = new AjaxControlToolkit.TabPanel();
        tab.ID = "tab" + Convert.ToString(tabCount);
        tab.HeaderText = "tab" + Convert.ToString(tabCount);
        MainTabContainer.Tabs.Add(tab);
    }
4

2 回答 2

0

是什么让您无法在代码后面创建控件并将其添加到面板中?在设计器中创建一个面板,为其命名,然后在您需要的任何地方的代码中创建/添加所有控件。Viewstate 将在回发之间保留它们的内容,您不需要做任何额外的事情。

于 2013-09-01T10:39:45.400 回答
0

您需要在每次回发时重新创建选项卡。

例如,您可以将选项卡的数量存储在 ViewState 中。

然后在 PostBack 上,添加标签,例如在 Page_Load 事件处理程序中:

var tabCount = ... get it from ViewState
for(int i=0; i<tabCount; i++)
{
    AjaxControlToolkit.TabPanel tab = new AjaxControlToolkit.TabPanel();
    tab.ID = "tab" + Convert.ToString(i+1);
    tab.HeaderText = "tab" + Convert.ToString(i+1);
    MainTabContainer.Tabs.Add(tab);
}
于 2013-09-05T04:48:28.550 回答