2012-11-12 58 views
0

我試圖訪問會話變量的自定義類裏,像這樣:HttpContext的會議總是空

控制器:

public void RemoveMachinesListChanged(object sender, RemovePackageEvent e) 
    { 
     PackageActionStatus.Current.Machines = e.Machines; 
     // Dictionary<int, int> machines = e.Machines; 
    } 

public class PackageActionStatus 
{ 
    public static PackageActionStatus Current 
    { 
     get 
     { 
      HttpContextWrapper context = new HttpContextWrapper(System.Web.HttpContext.Current); 
      var session = (PackageActionStatus)context.Session["PackageActionStatus"]; 
      if (session == null) 
      { 
       session = new PackageActionStatus(); 
       context.Session["PackageActionStatus"] = session; 
      } 

      return session; 
     } 
    } 

    private Dictionary<int, int> machines; 

    public Dictionary<int, int> Machines 
    { 
     get 
     { 
      return this.machines; 
     } 
     set 
     { 
      if (this.machines == null) 
      { 
       this.machines = new Dictionary<int, int>(); 
      } 

      this.machines = value; 
     } 
    } 
} 

什麼我」 m試圖在這裏實現通過AJAX調用來存儲和從/向會話變量檢索值。看來,只要我使用ajax HttpContext爲null。我會怎麼做? 謝謝

+0

怎麼叫這門課嗎? – jgauffin

回答

0

HttpContext可用於請求生命週期的某些點。另外,它僅在請求的線程中可用。

實現一個IHttpHandler,這已ProcessRequest方法具有請求的HttpContext作爲輸入參數的實例(詳細瞭解MSDN http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx)。

檢查ProcessRequest示例實現的位置:http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.processrequest.aspx

+0

怎麼樣?我不太明白:( – ShaneKm

+0

你需要實現那個接口'IHttpHandler'.HttpHandler可能是一個頁面,但你只是一個黑盒子,它會獲得一個AJAX請求並存儲會話或任何你想要的東西。你已經創建了自己的HTTP處理程序(稱之爲'SessionStorageHandler'),你需要在你的Web.config中註冊它。最後,使用HTTP POST(或其他類似的PUT)調用像http:// localhost/yourhandler這樣的url ),將調用你之前實現的整個'ProcessRequest'方法! –

+0

看到這個問題,「RemoveMachinesListChanged」沒有被ajax調用,它是一個事件監聽器,當「e.Machines」改變時會引發。在這個時候在一個會話中存儲e.Machines Dictionary ShaneKm