我正在尋找從當前頁面訪問創建動態控件並將它們附加到更新面板的方法。我想在我的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()
}
}
請原諒我我對asp.net相當陌生。你所說的是寫一種方法來存儲數據的舊值,並在一個時間間隔內檢查值是否改變?有沒有一種方法可以在數據更改時發出信號,而不是定期檢查? –
如果你想比較舊的和新的(他們是全球性的?),那麼你可以將舊數據和新數據存儲在緩存中,並在頁面ajax方法調用的服務器方法中比較它們。通常情況下,如果客戶端不間斷地調用該服務器方法,則不能從服務器向客戶端發送信號,但有一些庫可以簡化長輪詢技術(查看microsofts signalR http://www.asp.net/信號器) –
謝謝!在進一步瞭解SignalR和Polling後,看起來這兩種解決方案都可行!這裏是一篇關於SignalR的文章,如果它可以幫助其他人: http://trycatch.me/using-signlar-to-publish-dashboard-data/ –