为什么我的onauthenticate事件处理程序有时被调用两次?

时间:2013-11-21 16:34:00

标签: asp.net login

我正在使用asp:login控件来验证用户名和密码。以下是控制。要跟踪登录尝试,我使用会话变量LoginCount。我们只允许三次尝试。此外,我们使用WebControlAdapter来自定义asp:login控件。但不知何故,有时,事件处理程序Login1_Authenticat会被调用两次,这会使LoginCount增加2,只需一次尝试。任何人都可以帮我弄清楚哪里出了问题?

<asp:Login 
      ID="Login1" 
      runat="server" 
      OnAuthenticate="Login1_Authenticate"
      DestinationPageUrl="index.aspx" TitleText="" DisplayRememberMe="false" UserNameRequiredErrorMessage="Username is required." PasswordRequiredErrorMessage="Password is required."
    />

   public class LoginAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter
    {
        private enum State
        {
            LoggingIn,
            Failed,
            Success,
        }
        State _state = State.LoggingIn;

        ...    
        public LoginAdapter()
        {
            _state = State.LoggingIn;
        }

        /// ///////////////////////////////////////////////////////////////////////////////
        /// PROTECTED        

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            Login login = Control as Login;
            if (Extender.AdapterEnabled && (login != null))
            {
                RegisterScripts();
                login.LoggedIn += OnLoggedIn;
                login.LoginError += OnLoginError;
                _state = State.LoggingIn;
            }
        }
...

更新:原来是LoginAdapter中的一个错误。我厌倦了以下链接提供的修复,它的工作原理。 https://cssfriendly.codeplex.com/workitem/234

1 个答案:

答案 0 :(得分:0)

也许是因为您的用户在“登录”按钮上单击了两次?在发布到服务器之前,如何使用某些js代码在客户端禁用该按钮?将一个javascript函数添加到OnClientClick以禁用该按钮并避免这种情况。