2011-02-07 3 views
1

Je souhaite stocker des éléments dans une liste, mais chaque fois que j'appuie sur le bouton de confirmation pour ajouter un élément à la liste, la page est actualisée et réinitialisée. Comment puis-je empêcher cela de se produire tout en ayant un bouton d'ajout pour continuer à ajouter à la liste?Redémarrage automatique réinitialiser ma liste

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    } 
    else 
    { 
     slist = (List<Shopping>)ViewState["Items"]; 
    } 
} 

Liste:

private static List<Shopping> slist; 
     public List<Shopping> GetShopping() 
     { 
      return slist; 
     } 

CLICK:

slist = new List<Shopping>(); 
      Shopping s = new Shopping(); 
      s.Item1 = txtItem1.Text; 
      s.Item2 = txtItem2.Text; 
      s.Item3 = txtItem3.Text; 
      s.Item4 = txtItem3.Text; 

      slist.Add(s); 
      ViewState["Items"] = slist; 
      showShopping(); 

Méthode:

showShopping() 
{ 
GridView1.DataSource = GetShopping(); 
      GridView1.DataBind(); 
} 
+1

Utilisez Session au lieu de ViewState et vérifiez si le problème persiste. – Pabuc

+0

Il encore stocke un seul élément à la liste – user603605

Répondre

0

Ne stockez pas d'objets métier dans ViewState. Utilisez la session

private List<Shopping> ShoppingList 
{ 
    get { 
      var shopping = Session["Shopping"] as List<Shopping>; 
      if (shopping == null) 
      { 
       shopping = new List<Shopping>(); 
       Session["Shopping"] = shopping; 
      } 
      return shopping; 
     } 
    set { Session["Shopping"] = value; } 
} 

gestionnaire Bouton

var shopping = ShoppingList; 
shopping.Add(new Shopping()); 
... 
+0

expression invalide terme retour? – user603605

+0

@user avait un retour où il n'aurait pas dû y avoir. – Vadim

+0

Vraiment désolé pour le retard mais cela fonctionne bien MERCI! – user603605

1

bâtiment Stop/liant la liste sur votre chargement de la page sans vérifier Page.IsPostBack

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // bind/load lists and controls here 
    } 
    else 
    { 
     //this is a post back, don't reload everything 
    } 
} 

Modifier *

Ne jamais faire si jamais vous voulez soutenir plus de 1 shopper à la fois. Les utilisateurs finissent par écrire sur les listes les uns des autres, puis affichent le mauvais en permanence. Supprimez le modificateur "statique".

+0

protected void Page_Load (object sender, EventArgs e) { if (! IsPostBack) { } autre { List = (Liste ) ViewState [ "Articles"] ; } } Cela ne fonctionnera-t-il pas? – user603605

+0

Échangez votre code de la clause else à la clause If. Votre logique est à l'envers. – asawyer

+0

Avez-vous essayé d'intervenir avec un débogueur? Vous verriez le problème immédiatement. – asawyer

0

un certain temps depuis que je l'ai fait WebForms, mais il semble que vous assignez plusieurs éléments, mais seulement un « Shopping » sur le bouton événement de clic puis appeler :

showShopping() { GridView1.DataSource = GetShopping(); GridView1.DataBind(); }

vérifiez votre fixation GridView1 si vous souhaitez que les éléments à afficher par rapport à l'objet commercial qui vous êtes lié à.

+0

J'ai un sous-ensemble d'éléments stockés dans un objet Je veux ajouter ces éléments à une liste, puis égaler une session à cette liste. J'ai déclaré mes variables dans la classe en utilisant get set. Chaque ensemble d'éléments que je veux mettre dans une liste comme un ensemble chaque fois que je clique sur "ajouter un bouton". Donc définissez 1 = item1, item2, item3, item4 ... add ... un autre ensemble d'items et ainsi de suite. Il finit comme: 1 - article1, article2, item3, item4 2 - article1, article2, item3, item4 3 - article etc ... Chaque fois que vous appuyez sur le bouton Ajouter – user603605

+0

@ user603605 Essayez-vous afficher les éléments dans l'ensemble? Quand vous avez dit "Il stocke toujours un seul élément à la liste" @Pabuc faites-vous référence à l'ensemble ne possède qu'un seul élément ou que le GridView n'affiche que l'ensemble et aucun élément de l'ensemble? –

+0

ici ce plan expliquera mieux les choses: http://img109.imageshack.us/img109/7876/screen1pi.png – user603605

Questions connexes