2012-04-23 15 views
6

La mia situazione è la seguente: Ho questi elenchi con i dati inseriti in essi quando un utente preme un pulsante ADD, ma suppongo che nel postback gli elenchi vengano azzerati. Come li tieni preservati? Ho cercato la risposta, ma credo di non capire bene come usare la sessione, ecc.ASP.net con C# Mantenere una lista sul postback

Sono molto nuovo ad ASP.net e non molto meglio con C# sembrerebbe.

public partial class Main : System.Web.UI.Page 
{ 


List<string> code = new List<string>(); 


protected void Page_Load(object sender, EventArgs e) 
{ 
    //bleh 

} 

protected void cmdAdd_Click(object sender, EventArgs e) 
{ 

    code.Add(lstCode.Text); 
} 
+0

Quando si dice le liste, vuoi dire 'controlli ListView', o qualcos'altro? – SouthShoreAK

+0

@SouthShoreAK Si intende l'elenco generico: 'Elenco ' – Khan

risposta

14

Basta utilizzare questa proprietà per memorizzare le informazioni:

public List<string> Code 
{ 
    get 
    { 
     if(HttpContext.Current.Session["Code"] == null) 
     { 
      HttpContext.Current.Session["Code"] = new List<string>(); 
     } 
     return HttpContext.Current.Session["Code"] as List<string>; 
    } 
    set 
    { 
     HttpContext.Current.Session["Code"] = value; 
    } 

} 
+2

Questo è, secondo me, il modo migliore per farlo. –

+0

Non so come usarlo. –

+0

@JakeGaston copia semplicemente questa proprietà nella tua classe principale. E invece della tua variabile "codice", usa la proprietà "Codice". –

3

Questa è una stranezza in ASP.NET. Ogni volta che aggiungi elementi a un controllo di raccolta (casella di riepilogo, casella combinata) al livello di programmazione, devi reinserire il controllo su ogni postback.

Ciò è dovuto al fatto che Viewstate conosce solo gli elementi aggiunti durante il ciclo di rendering della pagina. L'aggiunta di elementi sul lato client funziona solo la prima volta, quindi l'elemento è scomparso.

Prova questo:

public partial class Main : System.Web.UI.Page 
{ 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       Session["MyList"] = new List<string>(); 
      } 
      ComboBox cbo = myComboBox; //this is the combobox in your page 
      cbo.DataSource = (List<string>)Session["MyList"]; 
      cbo.DataBind(); 
     } 




     protected void cmdAdd_Click(object sender, EventArgs e) 
     { 
      List<string> code = Session["MyList"]; 
      code.Add(lstCode.Text); 
      Session["MyList"] = code; 
      myComboBox.DataSource = code; 
      myComboBox.DataBind(); 
     } 
    } 
+0

Ehi, grazie, proverò questo. Qual è lo spazio dei nomi (usando Sistema ...) per far funzionare la parola chiave della sessione, comunque? –

+0

Sessione non è una parola chiave. È una proprietà di tipo HttpSessionState. Puoi accedervi come questo HttpContext.Current.Session. –

1

Non si può tenere i valori tra le schiene postali.

È possibile utilizzare la sessione per preservare lista:

// store the list in the session 
List<string> code=new List<string>(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!IsPostBack) 
    Session["codeList"]=code; 

} 
// use the list 
void fn() 
{ 
code=List<string>(Session["codeList"]); // downcast to List<string> 
code.Add("some string"); // insert in the list 
Session["codeList"]=code; // save it again 
} 
Problemi correlati