Foros del Web » Programación para mayores de 30 ;) » .NET »

Pérdida valor variable al pulsar un botón...

Estas en el tema de Pérdida valor variable al pulsar un botón... en el foro de .NET en Foros del Web. Hola, tengo definidas unas instancias de dos clases como variables dentro de otra: CapaIntermedia.ComunicacionConModulos cM; ProgramacionLineal.ServicePL pL; Inicializado ambas en la función Page_Load: pL = ...
  #1 (permalink)  
Antiguo 23/04/2005, 04:43
 
Fecha de Ingreso: agosto-2004
Mensajes: 37
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta Pérdida valor variable al pulsar un botón...

Hola, tengo definidas unas instancias de dos clases como variables dentro de otra:
CapaIntermedia.ComunicacionConModulos cM;
ProgramacionLineal.ServicePL pL;

Inicializado ambas en la función Page_Load:
pL = new ProgramacionLineal.ServicePL();
cM = new CapaIntermedia.ComunicacionConModulos();

Y defino unas funciones get/set para obtener la valor particular de cada instancia:
public CapaIntermedia.ComunicacionConModulos getInstanciaComunicaConModulos () { return cM;}
public void setInstanciaComunicaConModulos (CapaIntermedia.ComunicacionConModulos capa) {cM = capa;}

En una función...Calcular_Click (...) almaceno el valor de cM:
setInstanciaComunicaConModulos (pL.getInstanciaCM());
Hasta aquí todo bien...

En otra función.. Analisis_Click (...) intento acceder a la instancia antes almacenada:
resultAS.Text = getInstanciaComunicaConModulos().getZj(0).ToString ();

pero ya ha perdido el valor de "cM".

He ido ejecutando paso a paso y cada vez que pulso uno de los botones del WebForm me reinicia el valor de las instancias "pL" y "cM".
¿Cómo podría solucionar esto? ¿Por qué pierde el valor de "cM" cada vez que pulso un botón del WebForm?

Gracias
  #2 (permalink)  
Antiguo 23/04/2005, 09:10
Rodolfo Israel
Invitado
 
Mensajes: n/a
Puntos:
Jeje, creo que esto nos paso alguna vez a todos

Hola amigo, a diferencia de cuando trabajas en Windows Forms, en ASP.NET cada vez que la pagina se recarga (cuando das un click a algun boton asp.net) pierdes el valor de todas las variables que hayas declarado o inicializado, por lo que cada vez que se recargue la página tienes que reasignarle los valores, esto es en el evento page_load, ¿y como puedo hacer para mantener intacto el valor de mis variables? pues bueno, una opcion es almacenar tus variables en el Objeto Session de la siguiente manera:

Código:
.. Page_Load ...
{

   if (!Page.IsPostBack) 
   { //Esto ocurre solo la primera vez que se carga tu página
	   //Inicializas tus variables y las almacenas en el Session
	   pL = new ProgramacionLineal.ServicePL();
	   cM = new CapaIntermedia.ComunicacionConModulos();
	   Page.Session("Variable_PL") = pL;
	   Page.Session("Variable_cM") = cM;
   }
   else
   { //Si no es la primera vez que se recarga la página ( Esto puede suseder cuando el servidor responde a un click del boton por ejemplo
	   //obtienes el valor de tus variables desde el Session
	   pL = Page.Session("Variable_PL") ;
 	   cM = Page.Session("Variable_cM");
   }


}
De esta manera el valor de tus variables se mantiene intacto entre diferentes recargas de la página, por lo que cada vez que necesites manipular tus variables vas a tener que traerlas primero del Session ( Mi_Variable = Page.Session("Nombre_Alamacenamiento") y una vez que hayas manipulado su valor guardarlo de nuevo en el sesion ( Page.Session("Nombre_Alamacenamiento") = Mi_Variable), algo asi harias en tus funciones que manejas los clicks de los botones, espero que esto resuelva tus dudas
  #3 (permalink)  
Antiguo 23/04/2005, 11:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 37
Antigüedad: 19 años, 8 meses
Puntos: 0
Ya está. Gracias ;-)

Gracias... ya lo hice como me dijiste y todo ok.

Lo q es no saber los principios básicos de la programación web... "es pa darme ".

Un amigo me acaba de decir que también se podría hacer por el ViewState, ¿diferencia entre ambos métodos?

Lo dicho, gracias.
  #4 (permalink)  
Antiguo 23/04/2005, 18:33
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Cita:
Iniciado por Orioles
Y defino unas funciones get/set para obtener la valor particular de cada instancia:
public CapaIntermedia.ComunicacionConModulos getInstanciaComunicaConModulos () { return cM;}
public void setInstanciaComunicaConModulos (CapaIntermedia.ComunicacionConModulos capa) {cM = capa;}
Lo anterior para manejar las funciones get/set puedes hacerlo utilizando propiedades:
Código:
 public CapaIntermedia.ComunicacionConModulos InstanciaComunicaConModulos {
  get {
	return cM;
  }
  set {
	cM = value;
  }
}
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #5 (permalink)  
Antiguo 25/04/2005, 08:23
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
La diferencia entre viewstate y session es que session, queda almacenado durante todo el transcurso de la session de usuario, es decir, durante toda la ejcución, en el viewstate es sólo para una página determinada, cuando abandonas la página se pierde.

Para tu caso te recomiendo viewstate, puesto que consume menos recursos del sistema, ya que si cambias la página se vacían las variables, y en el caso de session y de que no las tengas que volver a utilizar deberías hacer

session("variable") = nothing

para no estar consumiendo recursos. Espero haberme explicado. Un saludo
  #6 (permalink)  
Antiguo 26/04/2005, 08:39
 
Fecha de Ingreso: agosto-2004
Mensajes: 37
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta ¿Y con ViewState como sería?

...porque no termino de que me funcione.

Sustituyo "a pelo" donde tenía Page.Session (donde me dijeron en las respuestas anteriores) y pongo ViewState y me sale un error al ejecutar:

"Debe marcar el tipo 'ProgramacionLineal.ServicePL' como Serializable o
establecer un elemento TypeConverter distinto de ReferenceConverter en
el estado de vista."

Si pongo [Serializable] justo antes de las definiciones de las clases respectivas, y vuelvo a compilar y a "cargar" las referencias a estas clases, me sigue saliendo el mismo error.

Gracias.
  #7 (permalink)  
Antiguo 26/04/2005, 08:48
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Eso es porque ese tipo de dato no lo puedes almacenar en el viewstate, ahí sólo entran tipo de datos serializables, pero creo que en el session tampoco, (no te lo hago cierto), si lo que quieres es almacenar se tipo (ServicePL), debes buscar algún equivalente a string, integer, ...
  #8 (permalink)  
Antiguo 26/04/2005, 08:53
 
Fecha de Ingreso: agosto-2004
Mensajes: 37
Antigüedad: 19 años, 8 meses
Puntos: 0
Con el Session si me deja... asique creo que dejaré el Session (o al menos de momento... "pá ir probando las cosas") y luego si veo que me da muchos problemas intento cambiar y buscar la solución con ViewState.
Lo único, que al cambiar de página y demás haré lo que me comentaste de "vaciar" el Session.

Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:27.