2010-06-19 7 views
0

J'ai une page avec plusieurs DropDownLists générées dynamiquement. Les DDs se chargent et affichent les valeurs correctes au chargement de la page. Cependant, lorsque j'essaie de récupérer les valeurs à la publication, les DD semblent tous maintenir les valeurs qu'ils avaient au chargement de la page.Publication ne conservant pas les valeurs sélectionnées

Tous sont créés dans Page_Load; Aucun test pour IsPostBack; Le traitement est effectué dans le code ci-dessous:

void btnSubmit_Click(object sender, EventArgs e) 

{ 

System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath("\\") + "\\Logs\\Permissions.log",false); 

string szMask = hMask.Value.ToString(); 
sw.WriteLine("\t\t\t\t\t\t\t" + szMask); 

foreach (Control c in Page.Controls) 
    LoopControls(c, szMask, sw); 
sw.Close(); 
} 

private void LoopControls(Control Page, string szMask, System.IO.StreamWriter sw) 
{ 

foreach (Control c in Page.Controls) 
{ 
    if (c is DropDownList) 
    { 
     string szId = c.ID; 
     if (szId.StartsWith("ddlPerm")) 
     { 
      string[] szSplit = szId.Split(':'); 
      int iMaskPosition = Convert.ToInt32(szSplit[1].ToString()); 
      int iSecurityPermissionID = Convert.ToInt32(szSplit[2].ToString()); 
      DropDownList dd = (DropDownList)c; 
      string szPermission = dd.SelectedValue.ToString(); 
      if (szMask.Substring(iMaskPosition, 1) != szPermission) 
      { 
       sw.WriteLine("NE"); 
       if (iMaskPosition == 0) 
        szMask = szPermission + szMask.Substring(1); 
       else 
        szMask = szMask.Substring(0, iMaskPosition) + szPermission + szMask.Substring(iMaskPosition); 
      } 
      sw.WriteLine(szId + "\t\t" + iMaskPosition.ToString() + "\t" + iSecurityPermissionID.ToString() + "\t" + szPermission + "\t\t" + szMask); 
     } 
    } 
    else 
    { 
     if (c.Controls.Count > 0) 
     { 
      LoopControls(c, szMask, sw); 
     } 
    } 
} 
} 

Cela m'a vraiment mise sur écoute. Toute aide serait grandement appréciée.

Merci, jb

Répondre

5

Normalement, ce problème peut être résolu par

if (!IsPostback){ 

// bind all your dropdownlist here 
} 

Sinon, le les valeurs sélectionnées seront perdues après la reconsolidation.

2

Le problème peut être, comme vous le dites No test for IsPostBack. Vous êtes probablement en train d'écraser les valeurs et les états à chaque fois.

À la place, testez IsPostback et ne les écrivez pas si c'est vrai.

2

ViewState est maintenu entre les événements Init et Load. En créant et en remplissant vos contrôles pendant Load, vous arrivez essentiellement après que ViewState a déjà été géré. Créez vos contrôles pendant Init et vous devriez remarquer vos valeurs de publication coller.

Pour plus d'informations sur ce qui se passe entre et à chaque étape particulière du cycle de vie, consultez les informations sur ce lien: http://msdn.microsoft.com/en-us/library/ms178472.aspx

0

Tous sont créés dans Page_Load; Pas de test pour IsPostBack; Le traitement est effectué dans le code

Si vous ne testez pas pour IsPostBack puis sur chaque chargement de page les listes déroulantes sont recréés.

Vous devez tester IsPostBack et créer uniquement les listes déroulantes lorsqu'il ne s'agit pas d'un PostBack. AKA - Au premier chargement.

Questions connexes