2010-04-05 60 views
51

我使用的是与jQuery的asp.net pagemethods ....如何获取静态方法在C#中的会话变量的值?如何在静态方法中获取会话变量的值?

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

当我编译这个我得到的错误:

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

任何建议或任何其他?

+0

使用HttpContext.Current这样的: HttpContext.Current.Session [ “用户名”]的ToString(); – 2016-06-11 16:01:30

回答

84

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

HttpContext.Current让你当前的......嗯,HTTP上下文;您可以从中访问:会话,请求,响应等

+0

@jwwishart ya它的工作......但为什么这样呢? – 2010-04-05 06:28:40

+1

HttpContext.Current使您可以访问当前的Http上下文,正如编辑中所解释的那样。 HttpContext.Current属性是静态的(http://msdn.microsoft.com/en-us/library/system.web.httpcontext_members.aspx),它确实是神奇的,并且返回当前的HttpContext。您应该可以访问您在后面的代码中访问的大部分内容等。 – jwwishart 2010-04-05 06:33:06

+0

您试图通过静态方法访问非静态属性(Session属性)......显然它(Session属性)只存在于类的一个实例上!希望这能解释更好的东西? – jwwishart 2010-04-05 06:35:24

16

如果您尚未更改线程,则可以使用HttpContext.Current.Session,如jwwishart所示。

HttpContext.Current返回与该线程关联的上下文。例如,显然这意味着你不能使用它,如果你已经开始一个新的线程。你也可以在也需要考虑线程敏捷性 - ASP.NET请求并不总是在整个请求的同一线程上执行。 I 认为上下文是适当传播的,但这是需要记住的。

另一方面,我不确定你是否会为拥有一个AJAX页面方法的会话。你可以尝试一下,但我会对它有些紧张。理想情况下,您应该从客户端传递所需的所有信息。

2

尝试这种情况:

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