I am a newer web developer. I am working with ASP.NET 4 and C# in visual studio 2012. Also, I am using the latest version of the UI controls for ASP.NET.
I have a page where I need to be able to load a bunch of user controls(ascx pages). I used the following example :
http://demos.telerik.com/aspnet-ajax/ajax/examples/common/loadingusercontrols/defaultcs.aspx
to start building what I needed. I have 6-7 different controls but for this question I am going to relate to only 3 of them.
I have a master page that I am building off of. That master page has the RadScriptManager and RadAjaxPanel. The panel is set up as follows:
Then, in my page I have the following:
Then my code behind is as follows:
It will load pages the first time. I can then also swap drafts and fees but I can not return to the details page. In my debugging I am not seeing it ever finding the old control and removing it. At this point I am at a loss.
Am I going down the right path? Should I do this a different way?
Thanks for your time in advance.
I have a page where I need to be able to load a bunch of user controls(ascx pages). I used the following example :
http://demos.telerik.com/aspnet-ajax/ajax/examples/common/loadingusercontrols/defaultcs.aspx
to start building what I needed. I have 6-7 different controls but for this question I am going to relate to only 3 of them.
I have a master page that I am building off of. That master page has the RadScriptManager and RadAjaxPanel. The panel is set up as follows:
<div class="contentContainer"> <div class="contentPanel"> <telerik:RadAjaxPanel runat="server"> <asp:ContentPlaceHolder ID="MainContent" runat="server" /> </telerik:RadAjaxPanel> </div></div>Then, in my page I have the following:
<telerik:RadAjaxPanel runat="server"> <div class="tabsContainer"> <asp:LinkButton ID="lblDetails" runat="server" CssClass="headerTabItem" Text="Details" /> <asp:LinkButton ID="lblDrafts" runat="server" CssClass="headerTabItem" Text="Drafts"/> <asp:LinkButton ID="lblFees" runat="server" CssClass="headerTabItem" Text="Fees"/> </div> <div class="contentContainer"> <div class="panelContent"> <asp:Panel ID="displayPanel" runat="server"/> </div> </div> <div class="controlsContainer"> </div></telerik:RadAjaxPanel>Then my code behind is as follows:
private string LatestLoadedControlName { get { return (string)ViewState["LatestLoadedControlName"]; } set { ViewState["LatestLoadedControlName"] = value; } } #endregion #region Events /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { lblDetails.Click += new System.EventHandler(this.lb_Details_Click); lblDrafts.Click += new System.EventHandler(this.lb_Drafts_Click); lblFees.Click += new System.EventHandler(this.lb_Fees_Click); lblPayments.Click += new System.EventHandler(lb_Payments_Click); lblDeposits.Click += lb_Deposits_Click; lblTransactions.Click += lb_Transactions_Click; lblNotes.Click += lb_Notes_Click; lblStatements.Click += lb_Statements_Click; } /// <summary> /// Handles the Load event of the Page control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LoadUserControl(LatestLoadedControlName ?? "ClientDetail.ascx"); } } override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } protected void Page_PreRender(object sender, EventArgs e) { } #endregion Events private void lb_Details_Click(object sender, System.EventArgs e) { LoadUserControl("ClientDetail.ascx"); } private void lb_Drafts_Click(object sender, System.EventArgs e) { LoadUserControl("Drafts.ascx"); } private void lb_Fees_Click(object sender, System.EventArgs e) { LoadUserControl("Fees.ascx"); } /// <summary> /// Loads the user control. /// </summary> /// <param name="controlName">Name of the control.</param> public void LoadUserControl(string controlName) { if (!controlName.Contains(".ascx")) { //TODO: Make this better with substring controlName = controlName.Replace("MainContent_", ""); controlName += ".ascx"; } if (LatestLoadedControlName != null) { Control previousControl = displayPanel.FindControl(LatestLoadedControlName.Split('.')[0]); if (!Object.Equals(previousControl, null)) { this.displayPanel.Controls.Remove(previousControl); } } string userControlID = controlName.Split('.')[0]; Control targetControl = displayPanel.FindControl(userControlID); if (Object.Equals(targetControl, null)) { UserControl userControl = (UserControl)this.LoadControl(controlName); //slashes and tildes are forbidden userControl.ID = userControlID.Replace("/", "").Replace("~", ""); this.displayPanel.Controls.Add(userControl); LatestLoadedControlName = controlName; } } }It will load pages the first time. I can then also swap drafts and fees but I can not return to the details page. In my debugging I am not seeing it ever finding the old control and removing it. At this point I am at a loss.
Am I going down the right path? Should I do this a different way?
Thanks for your time in advance.