2012-04-23 19 views
6

Mi situación es la siguiente: Tengo estas listas con datos insertados cuando un usuario presiona un botón ADD, pero supongo que en la devolución las Listas vuelven a cero. ¿Cómo los mantienes? He estado buscando la respuesta, pero creo que no entiendo muy bien cómo usar la sesión, etc.ASP.net con C# Mantener una lista en postback

Soy muy nuevo en ASP.net y no mucho mejor con C# al parecer.

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

Cuando dice listas, ¿quiere decir 'controles ListView', o algo más? – SouthShoreAK

+0

@SouthShoreAK Se refiere a la lista genérica: 'List ' – Khan

Respuesta

14

sólo tiene que utilizar esta propiedad para almacenar información:

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

Esto es, según yo, la mejor manera de hacerlo. –

+0

No estoy seguro de cómo usar esto. –

+0

@JakeGaston solo copia esta propiedad en tu clase principal. Y en lugar de su variable de "código", use la propiedad "Código". –

3

Esto es una rareza en ASP.NET. Siempre que agregue elementos mediante programación a un control de recopilación (cuadro de lista, cuadro combinado), debe volver a llenar el control en en cada devolución.

Esto se debe a que Viewstate solo conoce los elementos agregados durante el ciclo de representación de la página. Agregar elementos en el lado del cliente solo funciona la primera vez, luego el artículo se va.

Prueba esto:

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

Hola, gracias, probaré esto. Sin embargo, ¿cuál es el espacio de nombres (usando System ...) para que la palabra clave de la sesión funcione? –

+0

Session no es una palabra clave. Es una propiedad de tipo HttpSessionState. Puede acceder a este como HttpContext.Current.Session. –

1

No se puede mantener valores entre los Post espaldas.

Puede utilizar la sesión a la lista de preservar:

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