2010-04-05 81 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();