Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在asp.net codebehind中创建永久控件_Asp.net_Web Applications - Fatal编程技术网

如何在asp.net codebehind中创建永久控件

如何在asp.net codebehind中创建永久控件,asp.net,web-applications,Asp.net,Web Applications,我必须在代码隐藏中向我的项目母版页添加一些控件,但我想在回发后仍保留它们。我如何才能做到这一点?我已经搜索过了,我认为我必须使用preinit,但我不知道如何使用,也不知道母版页是否有preinit <form id="form1" runat="server"> <asp:ScriptManager ID="MainScriptmanager" runat="server" EnablePartialRendering="true" /> <asp

我必须在代码隐藏中向我的项目母版页添加一些控件,但我想在回发后仍保留它们。我如何才能做到这一点?我已经搜索过了,我认为我必须使用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);
    }

受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
tabCount=tabCount+1;
AjaxControlToolkit.TabPanel tab=新的AjaxControlToolkit.TabPanel();
tab.ID=“tab”+转换为字符串(tabCount);
tab.HeaderText=“tab”+转换为字符串(tabCount);
MainTabContainer.Tabs.Add(选项卡);
}

是什么阻止您在代码隐藏中创建控件并将其添加到面板中?在designer中创建一个面板,命名它,并在需要时在代码隐藏中创建/添加所有控件。Viewstate将在回发之间保留其内容,您不需要做任何额外的操作。

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

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

然后在回发时,添加选项卡,例如在页面加载事件处理程序中:

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);
}
var tabCount=。。。从ViewState获取它

对于(int i=0;我已经尝试过了,但不起作用。让我解释一下:我在五月母版页中有一个功能区栏和一个选项卡容器。我想通过单击功能区中的每个项目在选项卡容器中添加一个相关的选项卡(单击功能区栏上的项目进行回发)我想保留旧标签。如果你想避免回发:1.你可以在服务器端预先填充所有相关标签,并通过js将它们显示在客户端。2.或者你可以完全通过js动态创建标签(如果不需要来自服务器的数据)3.您可以使用asp.net的ajax功能只更新页面的相关部分,而不进行整页回发。如果不知道您面临的具体情况,我无法判断哪一个是最好的。无法通过页面的OnInit重新添加以前添加的每个选项卡?我不记得OnInit,但您显然可以在page_loadbu中进行此操作回发后,我不再有以前的选项卡。是的,但我选项卡的标题和内容模板不是这样简单。我将选项卡保留在一个会话中,每次回发后,我都尝试使用该会话重新创建它们。我面临此错误:预渲染后可能无法注册脚本控件。值得注意的是,我可以通过创建新的cl来解决我的问题使用树属性填充tab的Id、headerTemplate、contentTemplate并将其保持在会话中,它可以正常工作,但我更喜欢将整个选项卡保持在会话中,因为它不需要在每次回发后重新创建所有旧选项卡,只需要将旧选项卡添加到tabcontainer,但它无论如何都不起作用“我更喜欢将选项卡保持在会话中”-但这样做是错误的,因为正如你所说,它不起作用。相反,在每次回发上重新创建控件。