2013-08-20 47 views
2

我正在尋找從當前頁面訪問創建動態控件並將它們附加到更新面板的方法。我想在我的CacheItemUpdateCallback的末尾調用這個方法來顯示緩存中的新數據。HttpContext.Current在CacheItemUpdateCallback中爲空

做了一些研究後,似乎無法從異步方法訪問HttpContext.Current,因爲它是線程特定的。

是否有一個更好的過程來強制動態內容刷新新值寫入緩存後還是有辦法我可以從我的CacheItemUpdateCallback訪問HttpContext.Current?

創建內容的方法,其中容器是DIV對象我的頁面上的數組:

public void createInnerHtml() 
{ 
    this.contentLength = ddlContentNumber.SelectedIndex + 1; 
    for (int i = 0; i < this.contentLength; i++) 
    { 
     containers[i].Controls.Clear(); 
     containers[i].Attributes["Data-Value"] = mainFeeds[i].DataValue.ToString(); 
     containers[i].InnerHtml = mainFeeds[i].getHeaderString(); 
     containers[i].Controls.Add(controlManager.getControl(mainFeeds[i])); 
    } 
} 

我希望能夠做到:

private void openIncidentsUpdateCallback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) 
{ 
    dependency = null; 
    absoluteExpiration = DateTime.Now.AddSeconds(25); 
    slidingExpiration = Cache.NoSlidingExpiration; 
    expensiveObject = getExpensiveObject() 

    Page page = (Page)HttpContext.Current.Handler; 
    if (page != null) 
    { 
     ((ReportPage)page).createInnerHtml(); 
     page.updatePanel1.update() 
    } 
} 

回答

0

基本上你創建一個調用查詢緩存對象的方法的ajax輪詢。你無法從緩存過期回調中更新頁面,因爲所使用的線程與請求對象無關(它是asp.net/iis進程的一部分,而不是與HttpRequest有關的任何內容)。上下文被填充))。

所以基本上在頁面上你需要顯示數據創建一個$ .ajax或者使用一個asp.net ATLAS定時器(或者直接.js ajax,如果你願意的話)調用一個asmx端點或者一個WebMethod查詢HttpContext.Current.Cache並返回適當的字符串/ html/json/xml /任何數據。

UPDATE:

有可用於服務器庫更新客戶端,而程序員理解/執行長輪詢/輪詢技術。看看SignalR http://www.asp.net/signalr

+0

請原諒我我對asp.net相當陌生。你所說的是寫一種方法來存儲數據的舊值,並在一個時間間隔內檢查值是否改變?有沒有一種方法可以在數據更改時發出信號,而不是定期檢查? –

+0

如果你想比較舊的和新的(他們是全球性的?),那麼你可以將舊數據和新數據存儲在緩存中,並在頁面ajax方法調用的服務器方法中比較它們。通常情況下,如果客戶端不間斷地調用該服務器方法,則不能從服務器向客戶端發送信號,但有一些庫可以簡化長輪詢技術(查看microsofts signalR http://www.asp.net/信號器) –

+0

謝謝!在進一步瞭解SignalR和Polling後,看起來這兩種解決方案都可行!這裏是一篇關於SignalR的文章,如果它可以幫助其他人: http://trycatch.me/using-signlar-to-publish-dashboard-data/ –

相關問題