c# - asp.net checkbox not checked on postback -


i know there plenty questions asked this, not able find answer in case.

the case: have dropdown , placeholder on page and, depending on selected option, related contents loaded in. in content 3 have checkbox doesn't post correct checked state.

the problem dropdown postback , on top of doing postback on button click when contents loaded.

the example case:

parent control:

public class myaccount : baseauthcontrol {     protected placeholder phcontentma;      protected override void page_load(object sender, eventargs e)     {         base.page_load(sender, e);            loadstage(3);                 }      private void loadstage(int index)     {         switch (index)         {             case 1:                 var oh = page.loadcontrol("orderhistory");                 phcontentma.controls.add(oh);                 break;             case 2:                 var st = page.loadcontrol("statement");                 phcontentma.controls.add(st);                 break;             case 3:                 var pa = page.loadcontrol("productanalysis");                 phcontentma.controls.add(pa);                 break;             case 4:                 var bo = page.loadcontrol("backorders");                 phcontentma.controls.add(bo);                 break;         }     }      protected void cbmyaccount_selectedindexchanged(object sender, eventargs e)     {         loadstage(cbmyaccount.selectedindex);                 } } 

parent .ascx:

<%@ control language="c#" codebehind="myaccount.ascx.cs" inherits="controls.myaccount"%>  action: <asp:dropdownlist id="cbmyaccount" runat="server" enableviewstate="false" autopostback="true" onselectedindexchanged="cbmyaccount_selectedindexchanged" />  <asp:placeholder id="phcontentma" runat="server"></asp:placeholder> 

the problematic child control:

public class productanalysis : baseauthcontrol {     protected repeater rptrproducts;      protected literal ltstockcode;     protected literal ltstockdesc;     protected literal ltqtysold;     protected literal ltamount;      protected hyperlink lnkaddtocart;      protected checkbox chkmultiple;      protected override void oninit(eventargs e)     {         base.oninit(e);          var salestats = // results database;          rptrproducts.datasource = salestats;         rptrproducts.databind();     }      protected void rptrproducts_itemdatabound(object sender, repeateritemeventargs e)     {                     if (e.item.itemtype != listitemtype.item && e.item.itemtype != listitemtype.alternatingitem) return;          var saleitem = e.item.dataitem tsalestat;          if (saleitem == null) return;          var stockitem = getitem(saleitem.stockcode);          if (stockitem == null) return;          if (ccutils.assignrepeatercontrol(e, out ltstockcode, "ltstockcode"))             ltstockcode.text = stockitem.stockcode;          if (ccutils.assignrepeatercontrol(e, out ltstockdesc, "ltstockdesc"))             ltstockdesc.text = stockitem.shortdesc;          if (ccutils.assignrepeatercontrol(e, out ltqtysold, "ltqtysold"))             ltqtysold.text = saleitem.quantitysold.tostring(cultureinfo.invariantculture);          if (ccutils.assignrepeatercontrol(e, out ltamount, "ltamount"))             ltamount.text = ccutils.getcurrencyprice(session, (decimal)saleitem.totalprice);          if (ccutils.assignrepeatercontrol(e, out lnkaddtocart, "lnkaddtocart"))                         lnkaddtocart.navigateurl = stockitem.buildbuynowlink();          if (ccutils.assignrepeatercontrol(e, out lnkaddtocart, "lnkaddtocart"))             lnkaddtocart.navigateurl = stockitem.buildbuynowlink();          if (ccutils.assignrepeatercontrol(e, out chkmultiple, "chkmultiple"))         {                             chkmultiple.attributes.add("value", stockitem.stockcode);         }     }      protected void btnclick(object sender, eventargs e)     {                     var stockcodes = new list<string>();          if (!rptrproducts.isassigned()) return;          foreach (repeateritem repeateritems in rptrproducts.items)         {                             foreach (var childcontrol in repeateritems.controls)             {                 var checkbox = childcontrol checkbox;                  if (checkbox == null) continue;                  if (checkbox.checked) // false here                     stockcodes.add(checkbox.attributes["value"]);             }         }          var test = stockcodes;     } } 

and child .ascx code:

<%@ control language="c#"  codebehind="productanalysis.ascx.cs" inherits="controls.productanalysis" %>  <div id="viewproductspurchased">        <asp:repeater runat="server" id="rptrproducts" onitemdatabound="rptrproducts_itemdatabound" enableviewstate="true">         <headertemplate>             <table>                 <thead>                     <tr>                         <th>stock code</th>                         <th>stock description</th>                         <th>total sold</th>                         <th>total value</th>                         <th colspan="2"><asp:button runat="server" cssclass="uppercase" id="btn" onclick="btnclick" text="add selected cart" usesubmitbehavior="false" /></th> <!-- postback button -->                     </tr>                 </thead>                 <tbody>         </headertemplate>         <itemtemplate>                     <tr>                         <td>                             <asp:literal runat="server" id="ltstockcode" />                         </td>                                                 <td>                             <asp:literal runat="server" id="ltstockdesc" />                         </td>                         <td>                             <asp:literal runat="server" id="ltqtysold" />                         </td>                         <td>                             <asp:literal runat="server" id="ltamount" />                         </td>                         <td>                             <asp:hyperlink runat="server" text="add" cssclass="buttonlink" id="lnkaddtocart" />                         </td>                         <td>                             <asp:checkbox runat="server" id="chkmultiple" /> <!-- checkbox never checked on postback -->                         </td>                     </tr>         </itemtemplate>         <footertemplate>                 </tbody>             </table>         </footertemplate>     </asp:repeater> </div> 

i have tried wrapping code !page.ispostback:

if (!page.ispostback) { var salestats = // results database;  rptrproducts.datasource = salestats; rptrproducts.databind(); } 

in case nothing loaded because of postback dropdown.

i open suggestions, fixes or workarounds sorted - spent far time already.

p.s. sorry bloat of code , please ignore missing closing tags if there any.

(from msdn) view state used automatically asp.net page framework persist information must preserved between postbacks. information includes non-default values of controls.

view state repository in asp.net page can store values have retained during postback. page framework uses view state persist control settings between postbacks. keeps values between postbacks without storing them in session state

here in case setting property false values of these controls got lost during postback. removing property identifying if there change in dropdown selection or not.


Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -