asp.net - Viewstate and Tab container -


i have following code tab container , able create tab dynamically try click add tab previous tab disappears, can't figure out how keep viewstate, can please me this.

test5.aspx

<%@ page language="c#" autoeventwireup="true" codefile="test5.aspx.cs" inherits="test5" %>  <!doctype html>  <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">     <title></title> </head> <body>     <form id="form1" runat="server">     <div>         <asp:scriptmanager id="scriptmanager1" runat="server"></asp:scriptmanager> <cc1:tabcontainer id="tabcontainer1" visible="true" runat="server" height="150px">      <cc1:tabpanel id="tab0" runat="server" headertext="step 1">         <contenttemplate>             test             <asp:button id="add" text="add" onclick="add_click" runat="server" />         </contenttemplate>     </cc1:tabpanel>  </cc1:tabcontainer>        </div>     </form> </body> </html> 

test5.aspx.cs

using ajaxcontroltoolkit; using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols;  public partial class test5 : system.web.ui.page {     protected void page_load(object sender, eventargs e)     {      }      protected void add_click(object sender, eventargs e)     {         int currenttab = tabcontainer1.activetabindex;         int nexttab = currenttab + 1;          button btn = new button();         btn.id = "add" + nexttab.tostring();         btn.text = "add";         btn.click += new eventhandler(add_click);           tabpanel t = new tabpanel();         t.id = "tab" + nexttab;         t.headertext = "tab:" + nexttab;         t.controls.add(btn);         tabcontainer1.tabs.add(t);     } } 

here's i'd do:

wrap following code:

        button btn = new button();         btn.id = "add" + nexttab.tostring();         btn.text = "add";         btn.click += new eventhandler(add_click);           tabpanel t = new tabpanel();         t.id = "tab" + nexttab;         t.headertext = "tab:" + nexttab;         t.controls.add(btn);         tabcontainer1.tabs.add(t); 

into own method called renderdynamictabs(int nexttab)

at end of add_click, add code:

if(null == viewstate["numdynamiccontrols"]) {     viewstate["numdynamiccontrols"] = 0; }  var dynamiccontrolcount = int.parse(viewstate["numdynamiccontrols"]); dynamiccontrolcount++; 

in page_load, add following:

if(null != viewstate["numdynamiccontrols"]) {     // there controls need re-generated     var dynamiccontrolcount = int.parse(viewstate["numdynamiccontrols"]);      for(int = 1; <= dynamiccontrolcount; i++)     {         renderdynamictabs(i);     } } 

that should both store , re-render controls after each postback.

finally, avoid duplication of code, in add_click, replace code copy-pasted renderdynamictabs call renderdynamictabs(nexttab);.


Comments