Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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
C# 使用用户控件延迟加载选项卡_C#_Asp.net_Ajax_Lazy Loading_Tabcontainer - Fatal编程技术网

C# 使用用户控件延迟加载选项卡

C# 使用用户控件延迟加载选项卡,c#,asp.net,ajax,lazy-loading,tabcontainer,C#,Asp.net,Ajax,Lazy Loading,Tabcontainer,我想在AJAX选项卡容器中使用惰性加载选项卡。我已经实施了它。但我面临的问题是,当我单击某个按钮或触发该用户控件中的任何事件时,它都不会被触发;什么也没发生 <asp:TabContainer runat="server" ID="TabContainerUp" ActiveTabIndex="0" AutoPostBack="true" OnActiveTabChanged="TabContainerUp_ActiveTabChanged"> &l

我想在AJAX选项卡容器中使用惰性加载选项卡。我已经实施了它。但我面临的问题是,当我单击某个按钮或触发该用户控件中的任何事件时,它都不会被触发;什么也没发生

<asp:TabContainer runat="server" ID="TabContainerUp" 
        ActiveTabIndex="0" AutoPostBack="true" OnActiveTabChanged="TabContainerUp_ActiveTabChanged">
        <asp:TabPanel ID="tab1" runat="server">
            <HeaderTemplate>
                <img src="images/uc1.png" alt="" />
            </HeaderTemplate>
            <ContentTemplate>
                <asp:Panel ID="pnlUC1" runat="server">
                </asp:Panel>
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="tab2" runat="server">
            <HeaderTemplate>
                <img src="images/uc2.png" alt="" />
            </HeaderTemplate>
            <ContentTemplate>
                <asp:Panel ID="pnlUC2" runat="server">
                </asp:Panel>
            </ContentTemplate>
        </asp:TabPanel>
    </asp:TabContainer>

您最迟需要在Page_加载中的每次回发上重新创建动态创建的控件,ID与以前相同。因此,您可以将它们加载并添加到ActiveTabChanged中的面板中,但您需要在Page_Init/Page_load的下一次回发中重新创建它们。因此,您需要将在会话中重新创建f.e.的内容存储在某个位置

但是我假设您正在使事情变得比必要的更复杂,您可以简单地创建这些UserControls,甚至在aspx上声明性地创建初始可见状态为false的UserControls。然后,您只需要在ActiveTabChanged中根据需要切换控件的可见性

注意:不可见的服务器端网络控件将根本不会呈现给客户端,并且不会保存任何ViewState。因此,宣布它们并不不利

延迟加载并不意味着尽可能晚地创建这些控件,而是意味着尽可能晚地对它们进行数据绑定。因此,永远不要从UserControl中的page_load f.e.将它们绑定到数据库,而只能从在必要时从ActiveTabChanged中的pagehere调用的方法绑定。因此,您可以在UserControl UC1中实现一个公共方法BindData

下面是一个简单的例子:

switch (tabName)
{
    case "tab1":
        UC1_1.Visible = true;
        UC1_1.BindData();
        UC1_2.Visible = false;
        break;
    case "tab2":
        UC1_1.Visible = false;
        UC1_2.Visible = true;
        UC1_2.BindData();
        break;
}
在你的用户控制中

这可能是关于延迟加载ajax选项卡面板的最佳教程:


您最迟需要在Page_加载中的每次回发上重新创建动态创建的控件,ID与以前相同。因此,您可以将它们加载并添加到ActiveTabChanged中的面板中,但您需要在Page_Init/Page_load的下一次回发中重新创建它们。因此,您需要将在会话中重新创建f.e.的内容存储在某个位置

但是我假设您正在使事情变得比必要的更复杂,您可以简单地创建这些UserControls,甚至在aspx上声明性地创建初始可见状态为false的UserControls。然后,您只需要在ActiveTabChanged中根据需要切换控件的可见性

注意:不可见的服务器端网络控件将根本不会呈现给客户端,并且不会保存任何ViewState。因此,宣布它们并不不利

延迟加载并不意味着尽可能晚地创建这些控件,而是意味着尽可能晚地对它们进行数据绑定。因此,永远不要从UserControl中的page_load f.e.将它们绑定到数据库,而只能从在必要时从ActiveTabChanged中的pagehere调用的方法绑定。因此,您可以在UserControl UC1中实现一个公共方法BindData

下面是一个简单的例子:

switch (tabName)
{
    case "tab1":
        UC1_1.Visible = true;
        UC1_1.BindData();
        UC1_2.Visible = false;
        break;
    case "tab2":
        UC1_1.Visible = false;
        UC1_2.Visible = true;
        UC1_2.BindData();
        break;
}
在你的用户控制中

这可能是关于延迟加载ajax选项卡面板的最佳教程:


关于如何延迟加载ajax选项卡面板的最佳教程:@TimSchmelter我已经试过了。这并不能解决我的问题。关于如何延迟加载ajax选项卡面板的最佳教程:@TimSchmelter我已经尝试过了。这并不能解决我的问题。如果我做了visible false,那么也会加载选项卡。将加载用户控件。我不希望他们在页面加载时加载,因为这会使我的页面加载速度变慢。我这样做是为了提高我的页面加载速度。@coder311:这就是我的意思:……永远不要从页面加载中将它们绑定到数据库。。。。使它们可见,并从ActiveTabChanged而不是从page_load将其数据绑定。它们不能自动加载,只能在需要时手动加载。我可以提供一个公共void数据绑定方法的示例吗?可以。这会让我更好地理解。嗨..蒂姆..我采用了这种方法..在从活动用户控件中的控件进行回发时,我遇到了一些问题。如果我设置为visible false,则也会加载选项卡。将加载用户控件。我不希望他们在页面加载时加载,因为这会使我的页面加载速度变慢。我这样做是为了提高我的页面加载速度。@coder311:这就是我的意思:……永远不要从页面加载中将它们绑定到数据库。。。。使它们可见,并从ActiveTabChanged而不是从page_load将其数据绑定。它们不能自动加载,只能在需要时手动加载。我可以提供一个公共void数据绑定方法的示例吗?可以。这会让我更好地理解。嗨..蒂姆..我采用了这种方法..在从活动用户控件中的控件进行回发时,我遇到了一些问题。
public void BindData()
{
    // put here all your databinding stuff 
    // that is in page_load now ...
}