2011-07-22 70 views
1

我有一些JavaScript應該在一定時間的非活動時間之後將用戶註銷。我可以從javascript調用LoginStatus.LoggingOut事件處理程序嗎?

我在後面的代碼中處理LoginStatus對象的正常LoggingOut事件的事件處理程序,但我無法弄清楚如何從我的JavaScript調用它。

我知道你可以使用__doPostBack調用處理鏈接或按鈕的Click事件的事件處理程序,但它似乎不適用於我的LoginStatus對象 - 我想這可能是因爲它沒有點擊事件(here's the doc) - 這不是一個正常的鏈接/按鈕。

我能想到的唯一方法就是創建一個實際的註銷按鈕/鏈接,編寫另一個事件處理程序,它與我的LoginStatus事件處理程序執行相同的操作,並使用__doPostBack調用此新程序 - 但我不太喜歡這個想法。

有沒有什麼辦法可以從我的JavaScript調用LoggingOut事件處理程序?

頁:

// html 
<asp:LoginStatus ID="loginstatus" runat="server" /> 
... 
// js 
function expireSession() { 
    __doPostBack('loginstatus', ''); // doesn't seem to work 
} 

的背後代碼:

Protected Sub loginstatus_LoggingOut(ByVal sender...) Handles loginstatus.LoggingOut 
    Logout() // this is my own logout sub 
End Sub 
+0

這是正常的,預計將會對每一個註銷按鈕一個網站的頁面,需要您登錄。爲什麼你不想要那個? – NotMe

+0

LoginStatus控件顯示一個用於註銷的註銷鏈接 - 我粘貼在那裏的代碼實際上顯示一個註銷按鈕/鏈接,該鏈接正常工作。但是,我的問題是,更向下的JavaScript試圖觸發該鏈接,或者更確切地說是鏈接的事件處理程序,而不能。對不起,如果不明確。 – parkker007

回答

1

我建議你採取不同的間歇。

創建一個「註銷」頁面,只需清除cookies/session/whatever並將用戶重定向到常規登錄頁面。當計時器已過時,請將JavaScript重定向到您的註銷頁面。

+0

我明白了。感謝你的回答!但我仍然對是否有通過javascript訪問事件處理程序的方式感到好奇 - 因爲您可以通過按鈕或鏈接進行操作,所以我覺得必須有某種方式。 – parkker007

+0

@ parkker007:您當然可以創建一個從loginstatus控件繼承的新控件,並向它添加您自己的按鈕單擊事件處理程序。 – NotMe

0

您可以通過獲得服務器端適當的javascript:ClientScript.GetPostBackClientHyperlink(LoginStatus1.Controls[0], null)

但不要忘了頁面上ClientScript.RegisterForEventValidation(LoginStatus1.Controls[0].UniqueID);註冊此腳本,渲染:

protected override void Render(System.Web.UI.HtmlTextWriter writer) 
{ 
    // required by ASP.NET to pass EnableEventValidation on page as our composed link 
    // will postback from other control not original LoginStatus 
    ClientScript.RegisterForEventValidation(LoginStatus1.Controls[0].UniqueID); 

    base.Render(writer); 
} 
相關問題