2010-04-05 8 views
51

J'utilise asp.net pagemethods avec jQuery .... Comment obtenir la valeur d'une variable de session dans la méthode statique en C#?Comment puis-je obtenir la valeur d'une variable de session dans une méthode statique?

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

Quand je compile ce que j'obtiens l'erreur:

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

Toute suggestion ou une alternative?

+0

utilisation HttpContext.Current comme ceci: HttpContext.Current.Session [ "UserName"] ToString();. –

Répondre

84

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

HttpContext.Current vous obtient le bien actuel ..., Http Contexte; à partir de laquelle vous pouvez accéder: Session, demande, réponse etc

+0

@jwwishart ça a marché ... Mais pourquoi est-ce vrai? –

+1

HttpContext.Current vous donne accès au contexte Http actuel comme expliqué dans l'édition que je viens de faire. La propriété HttpContext.Current est statique (http://msdn.microsoft.com/en-us/library/system.web.httpcontext_members.aspx) et elle est magique et vous renvoie le HttpContext actuel. Vous devriez avoir accès à la plupart des choses auxquelles vous avez accès dans le code, etc. – jwwishart

+0

P.S. Vous essayiez d'accéder à une propriété non statique (propriété Session) via une méthode statique ... évidemment, elle (la propriété Session) n'existe que sur une instance de la classe! J'espère que cela explique mieux les choses? – jwwishart

16

Si vous n'avez pas changé de thread, vous pouvez utiliser HttpContext.Current.Session, comme indiqué par jwwishart.

HttpContext.Current renvoie le contexte associé au thème. Évidemment, cela signifie que vous ne pouvez pas l'utiliser si vous avez démarré un nouveau sujet, par exemple. Vous pouvez devez également tenir compte de l'agilité de thread - Les demandes ASP.NET ne s'exécutent pas toujours sur le même thread pour l'ensemble de la demande. Je crois que le contexte est propagé de manière appropriée, mais c'est quelque chose à garder à l'esprit.

D'autre part, je ne sais pas si vous aurez une session pour une méthode de page AJAX. Vous pouvez l'essayer, mais je serais un peu nerveux. Idéalement, vous devriez transmettre toutes les informations dont vous avez besoin au client.

2

Essayez ceci:

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