我可以从javascript调用LoginStatus.LoggingOut事件处理程序吗?

问题描述:

我有一些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

我建议你采取不同的间歇。

创建一个“注销”页面,只需清除cookies/session/whatever并将用户重定向到常规登录页面。当计时器已过时,请将JavaScript重定向到您的注销页面。

+0

我明白了。感谢你的回答!但我仍然对是否有通过javascript访问事件处理程序的方式感到好奇 - 因为您可以通过按钮或链接进行操作,所以我觉得必须有某种方式。 – parkker007

+0

@ parkker007:您当然可以创建一个从loginstatus控件继承的新控件,并向它添加您自己的按钮单击事件处理程序。 – NotMe

您可以通过获得服务器端适当的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); 
}