0

I have a sysadmin tab and when clicked generates a lot of ajax tabpanel which is dynamic and database driven ...

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<ajaxToolkit:TabContainer ID="TabContainer1" runat="server" Width="100%" ActiveTabIndex="0"
    CssClass="ajax__tab_header">
    <ajaxToolkit:TabPanel ID="TPAdjCal" Width="100%" runat="server">
        <HeaderTemplate>
            <img runat="server" id="imgAdjCalendarleft" visible="false" alt="" src="../images/Tabs/GreenLeftBottom.gif" /><asp:Button
                ID="imgAdjCalendar" BorderStyle="none" Text="" CssClass="MainTabs"
                runat="server"></asp:Button><img alt="" src="../images/Tabs/GreenRightBottom.gif"
                    runat="server" id="imgAdjCalendarright" visible="false" />
        </HeaderTemplate>
        <ContentTemplate>
            <table class="HeaderCaption" id="Table1" cellspacing="0" cellpadding="3" width="100%"
                border="0" runat="server">
                <tr class="PagerRow">
                    <td>
                        <asp:Label ID="HeaderLabel1" runat="server" Text="Label"></asp:Label>
                        <asp:Label ID="FunctionCode1" runat="server" Text="" Visible="false"></asp:Label>
                    </td>
                    <td>
                    </td>
                    <td>
                    </td>
                </tr>
            </table>
        </ContentTemplate>
    </ajaxToolkit:TabPanel>
    <ajaxToolkit:TabPanel ID="TabContainer2" Width="100%" runat="server">
        <HeaderTemplate>
            <img runat="server" id="imgPoliceReportsleft" visible="false" alt="" src="../images/Tabs/GreenLeftBottom.gif" /><asp:Button
                ID="imgPoliceReports" BorderStyle="none" Text="" CssClass="MainTabs"
                runat="server"></asp:Button><img alt="" src="../images/Tabs/GreenRightBottom.gif"
                    runat="server" id="imgPoliceReportsright" visible="false" />
        </HeaderTemplate>
        <ContentTemplate>
            <table class="HeaderCaption" id="Table2" cellspacing="0" cellpadding="3" width="100%"
                border="0" runat="server">
                <tr class="PagerRow">
                    <td>
                        <asp:Label ID="HeaderLabel2" runat="server" Text="Label"></asp:Label>
                        <asp:Label ID="FunctionCode2" runat="server" Text="" Visible="false"></asp:Label>
                    </td>
                    <td>
                    </td>
                    <td>
                    </td>
                </tr>
            </table>
        </ContentTemplate>
    </ajaxToolkit:TabPanel>
 </ajaxToolkit:TabContainer>

CODE BEHIND: when sysadmin tab is clicked i call a loadmanager method which loads the tabs.. sample below

      protected void LoadManagerTabs(bool runFirstLoad)
        {
       if (Session["UserSystemTabs"] == null)
          {
     postMessage("You do not have access to any system functions", Constants.ERROR_MSG,false);
        return;
    }

    string[,] functions = Session["UserSystemTabs"] as string[,];

    functions.GetLength(0);
    if (functions.GetLength(0) > 0)
    {
        string funccode = functions[0, 0];
        if (funccode.Length > 0)
        {
            if (isHaveAccess(funccode))
            {
                string pagename = DBUtils.getFuncUrlByCode(funccode);
                try
                {
                    eClaim.Controls.Tables.DataTables contr = null;
                    contr = (eClaim.Controls.Tables.DataTables)LoadControl("~/" + pagename + ".ascx");
                    contr.Key = "";
                    contr.runPageLoad = runFirstLoad;

                    contr.FuncCode = funccode;
                    TPAdjCal.Controls.Add(contr);
                    TPAdjCal.Visible = true;
                    imgAdjCalendar.Text = functions[0, 1];
                    HeaderLabel1.Text = functions[0, 1];
                    FunctionCode1.Text = functions[0, 0];
                    //imgAdjCalendar.Visible = true;
                }
                catch
                {
                    DataTablesV2 contr = null;
                    contr = (DataTablesV2)LoadControl("~/" + pagename + ".ascx");
                    contr.Key = "";
                    //contr.runPageLoad = runFirstLoad;

                    if (ShouldRunPageLoad(funccode) && TabContainer1.ActiveTabIndex.Equals(0))
                    {
                        contr.runPageLoad = true;
                    }
                    else
                    {
                        contr.runPageLoad = false;
                    }

                    contr.FuncCode = funccode;
                    TPAdjCal.Controls.Add(contr);
                    TPAdjCal.Visible = true;
                    imgAdjCalendar.Text = functions[0, 1];
                    HeaderLabel1.Text = functions[0, 1];
                    FunctionCode1.Text = functions[0, 0];
                    //imgAdjCalendar.Visible = true;
                }

                if (TabContainer1.ActiveTabIndex.Equals(0))
                {
                    imgAdjCalendar.CssClass = "MainTabsSelected";
                    imgAdjCalendarleft.Src = "../images/Tabs/LightGreenLeftBottom.gif";
                    imgAdjCalendarright.Src = "../images/Tabs/LightGreenRightBottom.gif";
                }
                else
                {
                    imgAdjCalendar.CssClass = "MainTabs";
                    imgAdjCalendarleft.Src = "../images/Tabs/GreenLeftBottom.gif";
                    imgAdjCalendarright.Src = "../images/Tabs/GreenRightBottom.gif";
                }
            }
            else
            {
                TPAdjCal.Visible = true;
                imgAdjCalendar.Visible = false;
                imgAdjCalendarleft.Visible = false;
                imgAdjCalendarright.Visible = false;
            }
        }
    }
    else
    {
        TPAdjCal.Visible = true;
        imgAdjCalendar.Visible = false;
        imgAdjCalendarleft.Visible = false;
        imgAdjCalendarright.Visible = false;
        imgTabScrollright.Visible = false;
        btnTabScroll.Visible = false;
        imgTabScrollleft.Visible = false;
    }

    if (functions.GetLength(0) > 1)
    {
        string funccode = functions[1, 0];
        if (funccode.Length > 0)
        {
            if (isHaveAccess(funccode))
            {
                string pagename = DBUtils.getFuncUrlByCode(funccode);
                try
                {
                    eClaim.Controls.Tables.DataTables contr = null;
                    contr = (eClaim.Controls.Tables.DataTables)LoadControl("~/" + pagename + ".ascx");
                    contr.Key = "";
                    contr.runPageLoad = runFirstLoad;
                    contr.FuncCode = funccode;
                    TabContainer2.Controls.Add(contr);
                    TabContainer2.Visible = true;
                    imgPoliceReports.Text = functions[1, 1];
                    HeaderLabel2.Text = functions[1, 1];
                    FunctionCode2.Text = functions[1, 0];
                    //imgPoliceReports.Visible = true;
                }
                catch
                {
                    DataTablesV2 contr = null;
                    contr = (DataTablesV2)LoadControl("~/" + pagename + ".ascx");
                    contr.Key = "";
                    contr.runPageLoad = runFirstLoad;
                    contr.FuncCode = funccode;
                    TabContainer2.Controls.Add(contr);
                    TabContainer2.Visible = true;
                    imgPoliceReports.Text = functions[1, 1];
                    HeaderLabel2.Text = functions[1, 1];
                    FunctionCode2.Text = functions[1, 0];
                    //imgPoliceReports.Visible = true;
                }

                if (TabContainer1.ActiveTabIndex.Equals(1))
                {
                    imgPoliceReports.CssClass = "MainTabsSelected";
                    imgPoliceReportsleft.Src = "../images/Tabs/LightGreenLeftBottom.gif";
                    imgPoliceReportsright.Src = "../images/Tabs/LightGreenRightBottom.gif";
                }
                else
                {
                    imgPoliceReports.CssClass = "MainTabs";
                    imgPoliceReportsleft.Src = "../images/Tabs/GreenLeftBottom.gif";
                    imgPoliceReportsright.Src = "../images/Tabs/GreenRightBottom.gif";
                }
            }
            else
            {
                TabContainer2.Visible = true;
                imgPoliceReports.Visible = false;
                imgPoliceReportsleft.Visible = false;
                imgPoliceReportsright.Visible = false;
            }
        }
    }
    else
    {
        TabContainer2.Visible = true;
        imgPoliceReports.Visible = false;
        imgPoliceReportsleft.Visible = false;
        imgPoliceReportsright.Visible = false;
        imgTabScrollright.Visible = false;
        btnTabScroll.Visible = false;
         imgTabScrollleft.Visible = false;
    }

I am trying to implement lazy loading so when sysadmin tab is click only the first tab data will load and not all the tabs. I have been searching but i dont find anything to help me with my situation... any help will be much appreciated

Alberto De Caro
  • 5,147
  • 9
  • 47
  • 73
dansasu11
  • 875
  • 1
  • 9
  • 17

1 Answers1

0

the problem is what you want doesn't work with webforms. at least not like this. you may want to try using a multiview control. And, possibly, adding views to the multiview dynamically, but they all need to be created with each request for the views to function properly in webforms.

I would also try to encapsulate the UI details into webusercontrols (ascx) and load the user controls dynamically. this way you can keep most of the layout in design time, rather than runtime.

Jason Meckley
  • 7,589
  • 1
  • 24
  • 45
  • 1
    That is not true. You can lazy-load TabPanels easily. You just have to wrap them in UserControls and load them only when needed(not from page_load implicitely but via custom `bindData` method from TabContainer's `ActiveTabChanged` event handler). Here's a similar question's answer of me: http://stackoverflow.com/a/10931323/284240 – Tim Schmelter Jul 12 '12 at 13:48
  • so it's possible but not intuitive :) I would still avoid it for that reason alone. maintenance and debugging become order of magnitudes more difficult. – Jason Meckley Jul 12 '12 at 13:51
  • It isn't more difficult than anything else in ASP.NET once you know how it works :) – Tim Schmelter Jul 12 '12 at 13:55
  • you mean WebForms. ASP.Net is straight forward and adheres to http. WebForms is convoluted. – Jason Meckley Jul 12 '12 at 14:12
  • ASP.NET is just the technology. So WebForms, MVC or whatever, all is ASP.NET. But yes, this question is about [WebForms](http://www.asp.net/web-forms). – Tim Schmelter Jul 12 '12 at 14:16
  • .Net is an environment. ASP.Net is a framework built within .Net designed to handle HTTP. Webforms is an HTML view engine built on top of ASP.Net. MVC is another framework built on top of ASP.Net, so is Web API. ASP.Net != any of these frameworks although most people use the term interchangeably with Webforms. We ASP.Net was first introduced Webforms was the only option. – Jason Meckley Jul 12 '12 at 14:31