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

¿Se pueden usar variables de sesión dentro de una clase?

Estas en el tema de ¿Se pueden usar variables de sesión dentro de una clase? en el foro de .NET en Foros del Web. Tengo una clase donde estoy usando variables de sesión, sin embargo al compilar el proyecto me envía el error: “El nombre ‘session’ no existe en ...
  #1 (permalink)  
Antiguo 09/03/2005, 11:11
Avatar de see07  
Fecha de Ingreso: abril-2004
Ubicación: México, D.F.
Mensajes: 112
Antigüedad: 20 años
Puntos: 0
¿Se pueden usar variables de sesión dentro de una clase?

Tengo una clase donde estoy usando variables de sesión, sin embargo al compilar el proyecto me envía el error: “El nombre ‘session’ no existe en la clase o el espacio de nombres ‘WUC_CreDes.Class1’”.
Acaso ¿no se permite usar variables de sesión dentro de las clases?
El código es el siguiente:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WUC_CreDes
{
public class Class1
{
public static bool No_PostBack()
{
Session["par1"] = "";
return false;
}
}
}

Agradeceré su ayuda a este respecto.

A.L.
__________________
El hombre que tiene amigos ha de mostrarse amigo....
  #2 (permalink)  
Antiguo 09/03/2005, 11:45
Rodolfo Israel
Invitado
 
Mensajes: n/a
Puntos:
Mensaje

Creo que la unica forma en que puedes hacer eso es que cada vez que instancies un objeto de tu clase le pases por refenrencia el objeto Me.Page que es de donde se saca el Session, yo haria algo mas o menos asi:

Código:
namespace WUC_CreDes
{
   public class Class1
   {

     Public System.Web.UI.Page MiPagina;


      public static bool No_PostBack()
     {
        MiPagina.Session["par1"] = "";
        return false;
     }
   }
}

...
//Cuando instancies un objeto de esa clase:

WUC_CreDes.Class1 MiObjeto = new WUC_CreDes.Class1();
MiObjeto.MiPagina = Me.Page;

..

Creo que con eso puedes usar el session desde tu clase, lo recomendable seria pasarlo tambien en el constructor de tu clase, pero no se te olvide que por referencia.

Espero que eso te sirva de ayuda
  #3 (permalink)  
Antiguo 09/03/2005, 12:14
Avatar de see07  
Fecha de Ingreso: abril-2004
Ubicación: México, D.F.
Mensajes: 112
Antigüedad: 20 años
Puntos: 0
Gracias por responder, Rodolfo:
Cambié la línea: Public System.Web.UI.Page MiPagina;
por static System.Web.UI.Page MiPagina;
sin embargo al correr el proyecto al llegar a la línea: MiPagina.Session["par1"] = "";
me envía el error: "Referencia a onjeto no establecida como instancia de un objeto".
Creo que me falta algo...
A.L.
__________________
El hombre que tiene amigos ha de mostrarse amigo....
  #4 (permalink)  
Antiguo 09/03/2005, 12:40
Rodolfo Israel
Invitado
 
Mensajes: n/a
Puntos:
No estaras olvidando asignar a tu variable MiPagina el objeto this.Page cuando la instancias un objeto de tu clase?, el error que te aparece se debe a que MiPagina = nothing o Null, mete tu variable en un Watch y hasle un debug para confirmar lo que te digo, quizas estas olvidando asignar esa variable.

Otra cosa que puede ser es el haberle puesto static a tu variable MiPagina, no estoy seguro pues no lo he probado pero intentalo solo con public a ver que pasa.

Código:
WUC_CreDes.Class1 MiObjeto = new WUC_CreDes.Class1();
MiObjeto.MiPagina = this.Page;
Fe de Erratas: En el codigo anterior use Me.Page jaja eso es VB en C# lo harias con this.Page supongo.

Última edición por Rodolfo Israel; 09/03/2005 a las 12:42
  #5 (permalink)  
Antiguo 09/03/2005, 13:00
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
sin embargo al correr el proyecto al llegar a la línea: MiPagina.Session["par1"] = "";
me envía el error: "Referencia a onjeto no establecida como instancia de un objeto".
Creo que me falta algo...
La cuestiones es que estas manejando metodos compartidos (static para c# y shared para vb.net) y cuando son así no necesitan ser instanciados.. solo basta con que hagas ésto:

Cita:
boolean bln = WUC_CreDes.Class1.No_PostBack()
Aunque me llamada la atencion que guardes en una clase una session, que es lo que pretendes hacer con eso..?? porque una session no es propiamente parte de una clase, ya que tu clase será un objeto y se debe tratar como tal..

Mejor detallanos que deseas hacer con esa session.

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 09/03/2005, 16:43
Avatar de see07  
Fecha de Ingreso: abril-2004
Ubicación: México, D.F.
Mensajes: 112
Antigüedad: 20 años
Puntos: 0
Hola Rootk:
Tienes razón en lo que escribiste.
Mira lo que pretendo hacer es: dentro de una clase quiero mandar a generar WUC creados dinámicamente a una web form.
En la web form cuando hay post back tengo el código siguiente:

cual = Session["par1"].ToString();
bool que = WUC_CreDes.Class1.Hay_PostBack(cual);

Si te fijas, “cual” contiene el valor de la variable de sesión “par1”, la cual como no hallé la manera de pasarla a mi clase desistí de pasarla como variable de sesión, en vez de eso estoy pasando la cadena “cual”.

En mi clase tengo el código siguiente:

namespace WUC_CreDes
{
public class Class1
{

public static bool Hay_PostBack(string cual)
{
WUC_CreDes.WebForm1 parent1 = (WUC_CreDes.WebForm1) this.Page;
parent1.Example.Controls.Clear();
if(cual == "WUC4")
{
Control control = parent1.Page.LoadControl("WebUserControl4.ascx");
control.ID = "WebUserCotrol4";
parent1.Example.Controls.Add(control);
}
else
{
Control control = parent1.Page.LoadControl("WebUserControl3.ascx");
control.ID = "WebUserCotrol3";
parent1.Example.Controls.Add(control);
}
return false;
}
}
}

Sin embargo al compilar, refiriéndose a la línea:
WUC_CreDes.WebForm1 parent1 = (WUC_CreDes.WebForm1) this.Page;
Me envía el error “La palabra clave ‘this’ no es una propiedad estática, un método estático ni un inicializador de campo estático.
Lo que pretendo es que dependiendo del valor de “cual” (WUC4, o WUC3) genere dinámicamente los WUC WebUserControl3 o WebUserControl4 en la web form.

Te agradeceré tu ayuda al respecto.

Saludos.

A.L.
__________________
El hombre que tiene amigos ha de mostrarse amigo....
  #7 (permalink)  
Antiguo 09/03/2005, 18:22
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
En este caso no le veo sentido hacer una clase, porque no cargas tu control directamente en tu página ??.., simplemente así:

Cita:
cual = Session["par1"].ToString();
if(cual == "WUC4")
{
Page.LoadControl("WebUserControl4.ascx");
}
...
...
etc..
  #8 (permalink)  
Antiguo 10/03/2005, 10:06
Avatar de see07  
Fecha de Ingreso: abril-2004
Ubicación: México, D.F.
Mensajes: 112
Antigüedad: 20 años
Puntos: 0
Lo que pasa es que estoy desarrollando un prototipo que pueda ser usado en diferentes páginas web, por lo que estoy creando los WUC de manera dinamica.
__________________
El hombre que tiene amigos ha de mostrarse amigo....
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 16:57.