2014-02-08 45 views
0

我使用SqlDependency爲實時ASP.NET應用程序。而且我用我的幾乎整個項目的一些JavaScript方法,我可以像ScriptManager的註冊:Scriptmanager註冊JavaScript不工作內部事件

ScriptManager.RegisterStartupScript(this, typeof(Page), new Random().Next(0, 9999999).ToString(), "alert('Some Text');", true); 

這個作品無處不在期待類似的SqlDependency的onChange事件中:

SqlDependency dep = new SqlDependency(sqlCommand); 
SqlDependency.Start("my_con_str"); 
dep.OnChange += new OnChangeEventHandler(dep_OnChange); 
void dep_OnChange(object sender, SqlNotificationEventArgs e) 
{ 
    ScriptManager.RegisterStartupScript(this, typeof(Page), new Random().Next(0, 9999999).ToString(), "alert('TEST');", true); 
} 

上面的代碼沒有按」工作。但dep_OnChange事件RegisterStartupScript工作完美。通過該方式中的任何地方希望我試過的ScriptManagerClientScript沒有什麼工作..

注幾乎整個註冊方法:我敢肯定它不是有關的SqlDependency這是關於事件像onChange ..

任何幫助,將不勝感激。 謝謝。

回答

1

我不認爲這會工作,因爲ScriptManager需要Http上下文才能工作;在內部,它使用它來訪問請求/響應生命週期。由於依賴關係可以在該生命週期的外部發生變化,所以ScriptManager將無法實例化,因爲它只在生命週期中工作。這是靜態和無狀態ASP.NET的問題。

的唯一真正的選擇是考慮在客戶端輪詢機制,或檢查出HTML 5 server side events with ASP.NET,甚至HTML 5網頁插座。

+0

你的意思是sqldependency可以改變生命週期?而且我對SQLDependency很滿意,它顯示了整個on_change事件的變化,我不想改變它。沒有另一種解決方案嗎? –

+0

ScriptManager只能在服務器正在處理頁面回發時使用。這是它唯一的場景。 SQL依賴關係並不關心ASP.NET,因此您必須輪詢客戶端JavaScript中的更改。 –

+0

好,非常感謝。 –