2012-04-23 7 views
6

Meine Situation: Ich habe diese Listen mit in ihnen eingefügten Daten, wenn ein Benutzer eine ADD-Taste drückt, aber ich denke, auf Postbacks werden die Listen wieder auf Null gesetzt. Wie bewahren Sie sie? Ich habe nach der Antwort gesucht, aber ich denke, ich verstehe nicht ganz, wie man die Sitzung usw. verwendet.ASP.net mit C# diesem Keeping geht wie eine Liste auf Postbacks

Ich bin sehr neu in ASP.net und nicht viel besser mit C# es würde scheinen.

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

Wenn Sie sagen, Listen, meinst du 'ListView' Kontrollen, oder etwas anderes? – SouthShoreAK

+0

@SouthShoreAK Er bedeutet die allgemeine Liste: 'Liste ' – Khan

Antwort

14

Gerade diese Eigenschaft verwenden, um Informationen zu speichern:

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

Dies ist meiner Meinung nach der beste Weg, dies zu tun. –

+0

Nicht sicher, wie man das benutzt. –

+0

@JakeGaston kopieren Sie einfach diese Eigenschaft in der Hauptklasse. Und anstelle Ihrer "Code" -Variable verwenden Sie die Eigenschaft "Code". –

3

Dies ist eine Besonderheit in ASP.NET. Jedes Mal, wenn Sie programmatisch Elemente zu einer Sammlung Steuerung (listbox, Combobox) hinzuzufügen, müssen Sie erneut bevölkern die Kontrolle über jeder Postbacks.

Dies liegt daran, die Viewstate über Elemente kennt nur während der Seiten-Rendering-Zyklus hinzugefügt. Das Hinzufügen von Elementen auf der Clientseite funktioniert nur beim ersten Mal, dann ist das Element nicht mehr vorhanden.

Try this:

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

Hey, danke, ich werde das ausprobieren. Wie lautet der Namespace (mit System ...), um das Sitzungsschlüsselwort zu erhalten? –

+0

Sitzung ist kein Schlüsselwort. Es ist eine Eigenschaft vom Typ HttpSessionState. Sie können auf diese HttpContext.Current.Session zugreifen. –

1

Sie nicht Werte zwischen Post Rücken halten können.

Sie können Session verwenden Liste zu erhalten:

// 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 
}