2013-09-25 39 views
5

我'找一個方法來獲得訪問權限,並設置TempDataGLOBAL.ASAX訪問到TempData的從Global.asax中

我想這樣的,但對TempData的仍然得到錯誤。

HttpContext.Current.TempData["Passed"] = "1";

+0

你爲什麼要這麼做?聽起來不對。 – torm

+0

你想達到什麼目的? – christiandev

+1

我需要一個真正的臨時載體,以首頁加載。我需要在global.asax開始的會話中使用它,並給予用戶特別注意。等等。 –

回答

3

TempDataSystem.Web.Mvc.ControllerBase類的屬性。由於您不在控制器中,因此無法訪問。我非常懷疑你可以輕鬆搞定它,因爲整個鏈條是由MVC框架構建的。

由於TempData[]支持Session(即SessionStateTempDataProvider),您應該可以將值插入到會話中並將其取出。這確實依賴於閱讀源代碼(找到使用的密鑰),並且肯定不支持。

var dataKey = "__ControllerTempData"; 
var dataDict = HttpContext.Current.Session[dataKey] as IDictionary<string,object>; 
if (dataDict == null) { 
    /* what do you want to do? add a new IDict<> and put in session? */ 
} else { 
    dataDict["Passed"] = 1; 
    HttpContext.Current.Session[dataKey] = dataDict; 
} 

警告,未經測試的代碼!您將需要調試。

正如其他人所說,這樣做的原因是什麼?你想達到什麼目的?這可能是一個更好的方法來做到這一點。

+0

嗨,謝謝你的明確迴應。 但是,錯誤:名稱'currentTemp'在當前上下文中不存在。 –

+0

對不起,忘了更改一個位置。我希望你能看到並解決問題。如果你想做一些奇怪的事情,你應該能夠調試基礎知識。更新。 –

+2

經過測試。這從Application_AcquireRequestState工作(在BeginRequest中:Session始終爲空) –

0

那顯然不工作,因爲HttpContext沒有叫TempData任何財產。

根據要實現的,例如使用HttpContext.Current.CacheHttpContext.Current.Session什麼的......