2012-11-01 4 views
0

J'ai trois pages avec un comportement très similaire, donc j'ai fait un contrôle utilisateur avec 3 comportements, je l'ai fait en ajoutant une énumération et une propriété de ce type enum.UserControl perd des données

public enum ucType 
    { 
     CustomersWhoHaveAContract, CustomersWaitingForContract, CustomerOfPreReservedContracts 
    } 

    public ucType UserControlType; 

    protected void BtnLoadInfo_Click(object sender, ImageClickEventArgs e) 
    { 
     switch (UserControlType) 
     { 
      case ucType.CustomersWhoHaveAContract: 
       DoA(); 
       break; 
      case ucType.CustomersWaitingForContract: 
       DoB(); 
       break; 
      case ucType.CustomerOfPreReservedContracts: 
       DoC(); 
       break; 
      default: 
       break; 
     } 

dans mes pages j'attribuer une valeur à la UserControlType,

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      ucCustomersWithContract1.UserControlType = UserControls.ucCustomersWithContract.ucType.CustomerOfPreReservedContracts; 
     } 
    } 

mais quand je clique sur le bouton, le UserControlType est toujours CustomersWhoHaveAContract, ce qui signifie qu'elle est en train de perdre sa valeur. Où est le problème?

+0

Comment et quand attribuez-vous une valeur à cette propriété? – Andrei

+0

@Andrei sous forme de chargement. –

Répondre

0

Vous voulez dire ASP.NET WebForms, n'est-ce pas?
Les commandes ne récupèrent pas toutes leurs données automatiquement, il existe un mécanisme ViewState.

MSDN article
http://msdn.microsoft.com/en-us/library/ms972976.aspx

Pour fixer un exemple, changer votre champ dans la propriété:

public ucType UserControlType { 
    set { 
     ViewState["UserControlType"] = value; 
    } 
    get { 
     object o = ViewState["UserControlType"]; 
     if (o == null) 
     return ucType.CustomersWhoHaveAContract; // default value 
     else 
     return (ucType)o; 
    } 
} 

et cela devrait fonctionner.

+0

+1 pour la simplicité et l'exhaustivité, merci @SomeGuy pour votre code sympa et soigné. –

Questions connexes