2013-02-19 42 views
2

我創建了一個用於從java腳本調用函數的web方法。後面的aspx代碼具有視圖狀態[「cust_id」]。我想在公共靜態方法中使用這個cust_id,但我不能這樣做。請幫助我做到這一點。查看靜態方法中不工作的狀態

[WebMethod] 
    public static void add_plan_items(string plans) 
    { 
    string cust_id = Convert.ToString(ViewState["cust_id"]);//Error : object reference is required for non-static ... 
    } 
+0

好,不要讓它'static'呢!另外,IIRC,'WebMethod'不適用於靜態方法。 – leppie 2013-02-19 06:13:40

回答

3

錯誤是因爲ViewSate對象附加在頁面上。這就是爲什麼你不能在靜態方法使用它..

取而代之的是你需要傳遞cust_id作爲參數傳遞給方法,讓你的方法會像

[WebMethod] 
    public static void add_plan_items(string plans,string cust_id) 
    { 
    //your code 
    } 
+0

感謝您的回覆,但我從ascx頁面調用此函數。ascx頁面不包含cust_id.Only具有cust_id的此頁面。 – user1951007 2013-02-19 06:58:10

0

我在這裏看到了類似的問題
How could I access the ViewState of the current page using HttpContext?
這表明,我可以用httpcontext

private static T GetViewState<T>(string name) 
    { 
     return (T) ((BasePage)HttpContext.Current.CurrentHandler).PageViewState[name]; 
    } 

訪問視圖狀態我添加了一個新的PageViewState親並讓我的所有頁面從我的BasePage繼承以公開ViewState,然後可以獲取或設置它。

2

除了查看狀態,我們可以在Web服務中使用會話。
只是使會議真正的Web方法

[WebMethod(EnableSession = true)] 
public static Boolean AddRecord(string contextKey) 
{ 
    List<MID1> MID1s = HttpContext.Current.Session["MID1s"] as List<MID1>; 

    using (var ctx = new Entities()) 
    { 
     Boolean RetVal = false; 
     MID1s = new List<MID1>(); 
     MID1 objMID1 = new MID1(); 
     objMID1.ItemID = 1; 
     MID1s.Add(objMID1); 
     HttpContext.Current.Session["MID1s"] = MID1s; 
     return RetVal; 
    } 
}