2015-11-05 35 views
0

具有母版頁和多個子頁面的簡單網站。Javascript客戶端&asp.net事件處理程序計時問題 - 如何解決?

在Page_Load中,母版頁查找包含的值會話變量,如果它的存在,使用

Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + sessionTimeout + ");", true); 

這揭開序幕超時警報,工作正常。

有一個頁面上的服務器端的按鈕,有效地結束頁面上的用戶交互,並留下了消息,說明「去,如果你想要做更多的東西重新登錄」。單擊此按鈕時,我想清除會話變量(簡單)並結束運行超時警告警報腳本(並不那麼容易)。

由於法師「的Page_Load」事件觸發按鈕處理程序之前,當時的頁面重新加載,將重新啓動超時腳本。當它碰到按鈕事件處理程序並清除會話變量時,腳本已經運行就已經太遲了。

我試過使用「registerclientscriptblock」來注入立即的javascript來調用我有的「clearTimeout()」客戶端函數,但它似乎無法找到母版頁上存在的函數,並且錯誤。

這似乎是一個典型的「雞和蛋」的情景,我不能見樹不見林。在我開車瘋了之前,有人能指點我嗎?

編輯添加JavaScript代碼位:

目前在Page_Load代碼中引用母版頁功能「SessionExpireAlert」包含了除其他事項外本:

    window.updateInterval = setInterval(function() { 
        seconds--; 
        document.getElementById("idleTime").innerHTML = convertTime(seconds); 
        document.getElementById("expireTime").innerHTML = convertTime(seconds); 
       }, 1000); 
+0

該網頁應該能夠訪問由母版頁注入一個腳本創建的任何變量,所以它應該是setTimeout'的'的值賦給一個變種,然後通過注入一個腳本清除它的簡單情況之後的頁面。 – Archer

+0

我知道它*應該*但它不是!查看在上面的OP底部添加的代碼。如果在我的按鈕事件,我用的RegisterClientScriptBlock與「警報(window.updateInterval」);」,那麼警告框彈出與‘不確定’,但如果我從母版頁做的JavaScript它顯示我‘2’ – TheMook

+0

使用。 'RegisterStartupScript',同爲母版頁。你這樣做的方式只是把劇本中的頁面,在任何時候,你告訴它,而啓動腳本是在身體的放在最後,爲了。 – Archer

回答

1

RegisterStartupScript將腳本添加到末尾的DOM,所以當DOM運行時就準備好了。只要您在此之後總是使用RegisterStartupScript,腳本將按照您創建它們的順序添加和執行。

基本上,RegisterClientScriptBlock最有可能將腳本之前任何腳本添加RegisterStartupScript

0

你有沒有考慮把這個在Page_PreRender代替:

Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + sessionTimeout + ");", true); 

通過適當首先檢查,看是否有必要嗎?