2010-04-05 6 views
51

Sto usando i parametri di pagina asp.net con jQuery .... Come ottenere il valore di una variabile di sessione all'interno del metodo statico in C#?Come posso ottenere il valore di una variabile di sessione all'interno di un metodo statico?

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

Quando compilo questo ottengo l'errore:

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

Qualsiasi suggerimento o qualsiasi alternativa?

+0

uso HttpContext.Current come questo: HttpContext.Current.Session [ "username"] ToString();. –

risposta

84

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

HttpContext.Current si ottiene la corrente ... beh, Http contesto; da cui è possibile accedere: Sessione, Richiesta, Risposta, ecc.

+0

@jwwishart ya ha funzionato ... Ma perché è così? –

+1

HttpContext.Current ti dà accesso al contesto Http corrente come spiegato nella modifica che ho appena fatto. La proprietà HttpContext.Current è statica (http://msdn.microsoft.com/en-us/library/system.web.httpcontext_members.aspx) e fa la magia e restituisce l'attuale HttpContext. Dovresti avere accesso alla maggior parte delle cose a cui hai accesso nel codice sottostante ecc. – jwwishart

+0

P.S. Stavi tentando di accedere a una proprietà non statica (proprietà Session) tramite un metodo statico ... ovviamente (la proprietà Session) esiste solo su un'istanza della classe! Spero che questo spieghi meglio le cose? – jwwishart

16

Se non si è modificato il thread, è possibile utilizzare HttpContext.Current.Session, come indicato da jwwishart.

HttpContext.Current restituisce il contesto associato alla discussione. Ovviamente questo significa che non puoi usarlo se hai iniziato una nuova discussione, per esempio. È possibile che ,, sia necessario considerare l'agilità del thread: le richieste ASP.NET non vengono sempre eseguite sullo stesso thread per l'intera richiesta. I credo che il contesto sia propagato in modo appropriato, ma è qualcosa da tenere a mente.

D'altra parte, non sono sicuro se anche a è disponibile la sessione per un metodo pagina AJAX. Puoi provarlo, ma sarei un po 'nervoso. Idealmente dovresti passare tutte le informazioni di cui hai bisogno dal cliente.

2

Prova questo:

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