2016-08-09 54 views
0

我有一個基於幾個輸入選擇和「Go」按鈕獲取填充結果的GridView。防止客戶端腳本被重新註冊在後退按鈕或刷新

網格填充後,會出現「打印」按鈕。

此Print按鈕將GridView數據存儲在DataTable中並將其存儲在用戶Session中。

然後,它通過彈出一個帶有打印預覽和打印頁面選項的新窗口來註冊一個'onload'javascript客戶端腳本。

問題是當我離開頁面並導航回去時,以及當我刷新它時,打印彈出窗口重新顯示,我猜測是因爲ScriptManager.RegisterClientScriptBlock調用get以某種方式重新註冊。

有沒有一種方法可以明確清除客戶端腳本?我也不知道在這個生命週期的哪個階段你會去除。從邏輯上講,它只能在執行後立即執行,因爲在任何其他時間,它都可能阻止它永遠運行。

這裏是我的打印按鈕點擊代碼:

protected void btnPrintSummary_Click(object sender, EventArgs e) 
{ 
    DataTable dtPrint = ... 
    Session["Print_DataTable"] = dtPrint; 
    Session["Print_Sort"] = ViewState["Sort"]; 
    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "onload", "<script type=\"text/javascript\">OpenWindow('printpopup.aspx','print_patrol_summary',750,600,',scrollbars=yes');</script>", false); 
} 
+0

你有任何'IsPostBack'檢查..?你可以顯示「Page_Load」事件的代碼嗎? – MethodMan

+0

我可以,它很長。本質上它會檢查'if(!IsPostBack)...爲默認輸入集合填充數據並填充網格...'它不會註冊任何客戶端腳本,所以我不知道代碼本身是否會有所幫助 –

+0

幫助我的意見..因爲我們需要知道當後退按鈕被按下時會發生什麼......您可以設置一堆斷點並在單步執行代碼時查看yoursefl以重複相同的事情。試過嗎? – MethodMan

回答

0

您是否嘗試過在page_load使用ClientScriptManager.IsClientScriptBlockRegistered,以測試它是否已經被註冊?在這種情況下,只需使用空白腳本重新註冊即可。有關更多文檔,請參見here

+0

這會如何不會每次都清除腳本?在我看來,'onload' javascript函數發生在'Page_Load'之後,所以你的解決方案每次都會清除它,即使我希望它運行。 –