2010-04-05 26 views
51

Estoy usando asp.net pagemethods with jQuery .... ¿Cómo obtener el valor de una variable de sesión dentro del método estático en C#?¿Cómo puedo obtener el valor de una variable de sesión dentro de un método estático?

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["UserName"] = "Pandiya"; 
} 
[WebMethod] 
public static string GetName() 
{ 
    string s = Session["UserName"].ToString(); 
    return s; 
} 

Cuando compilo este me sale el error:

An object reference is required for the non-static field, method, or property 'System.Web.UI.Page.Session.get'`

Cualquier sugerencia o alguna alternativa?

+0

uso HttpContext.Current como esto: HttpContext.Current.Session [ "nombre de usuario"] ToString();. –

Respuesta

84

HttpContext.Current.Session["..."]

HttpContext.Current te lleva la corriente ... bueno, Http Contexto; desde el cual puede acceder: Sesión, Solicitud, Respuesta, etc.

+0

@jwwishart ya funcionó ... Pero ¿por qué es así? –

+1

HttpContext.Current le da acceso al contexto HTTP actual como se explica en la edición que acabo de hacer. La propiedad HttpContext.Current es estática (http://msdn.microsoft.com/en-us/library/system.web.httpcontext_members.aspx) y lo hace es magia y le devuelve el HttpContext actual. Debería tener acceso a la mayoría de las cosas a las que tiene acceso en el código detrás, etc. – jwwishart

+0

P.S. Intentabas acceder a una propiedad no estática (propiedad Session) a través de un método estático ... obviamente, ¡(la propiedad Session) existe solo en una instancia de la clase! Espero que esto explique las cosas mejor? – jwwishart

16

Si no ha cambiado el hilo, puede usar HttpContext.Current.Session, como lo indica jwwishart.

HttpContext.Current devuelve el contexto asociado con el subproceso. Obviamente, esto significa que no puede usarlo si ha iniciado un nuevo hilo, por ejemplo. Usted puede también necesita considerar la agilidad de subprocesos: las solicitudes de ASP.NET no siempre se ejecutan en el mismo subproceso para la totalidad de la solicitud. I cree que el contexto se propaga adecuadamente, pero es algo a tener en cuenta.

Por otro lado, no estoy seguro de si incluso tienen una sesión para un método de página AJAX. Puedes intentarlo, pero estaría algo nervioso de eso. Lo ideal es que pase toda la información que necesita del cliente.

2

Prueba esto:

HttpContext.Current.Session["UserName"].ToString(); 
Cuestiones relacionadas