2010-07-13 15 views
10

Ho un asp di serie: controllo login:Permetti al tasto Invio per accedere in asp.net?

<asp:Login ID="mbLogin" runat="server" TitleText="" 
    DestinationPageUrl="~/Default.aspx" 
    PasswordRecoveryText="Forgot your password?" 
    PasswordRecoveryUrl="~/LostPassword.aspx"></asp:Login> 

In Internet Explorer, premendo Invio non inviare il modulo, ma IE emette un segnale acustico a me 10 volte rapidamente. In altri browser Enter funziona perfettamente e invia il forum come ci si aspetterebbe.

Ho visto this question ma questo funziona solo quando si dispone di un elemento di forma reale con un pulsante effettivo, non il controllo di accesso nel suo complesso.

Perché viene bloccato in IE (e perché 10 volte per qualche motivo)? C'è una soluzione?

risposta

10

Nella finestra di progettazione del controllo di accesso: "Converti in modello". Quindi, nel caricamento della pagina, impostare il defaultButton del modulo trovando il LoginButton.

ASPX:

<form id="form1" runat="server"> 
    <div> 
     <asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"> 
      <LayoutTemplate> 
       <table border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse;"> 
        <tr> 
         <td> 
          <table border="0" cellpadding="0"> 
           ..... 
           <tr> 
            <td align="right" colspan="2"> 
             <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="Login1" /> 
            </td> 
           </tr> 
          </table> 
         </td> 
        </tr> 
       </table> 
      </LayoutTemplate> 
     </asp:Login> 
    </div> 
    </form> 

codice sottostante:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Button lbButton = Login1.FindControl("LoginButton") as Button; 
     form1.DefaultButton = lbButton.UniqueID; 
    } 
+0

Grazie, ha funzionato! – DisgruntledGoat

0

Questo è un trucco, ma fornirà un aggiramento per il tuo problema con Internet Explorer.
Aggiungi una casella di testo alla tua pagina che è nascosta alla vista.

<!-- Hack for Internet Explorer browsers to allow the page to post back when the enter key is pressed--> 
<asp:TextBox ID="txtIEHackBox" runat="server" style="visibility: hidden; display: none;" /> 

questo farà sì che Internet Explorer per rispedire coppia nome/valore del pulsante di controllo Web su di colpire Invio.

0
Button lbButton = Login1.FindControl("LoginButton") as Button; 

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1"); 
contentPlaceHolder.Page.Form.DefaultButton = lbButton.UniqueID; 
+0

Alcune spiegazioni sarebbero belle e anche dove metterle (ad esempio nell'evento Page_Load). – Styxxy

0

So che questo è un post super vecchio, ma un altro modo per fare questo è di utilizzando un asp:Panel con DefaultButton impostato sull'ID del pulsante presso l'utente normalmente fare clic su per il login:

<asp:Login ID="LoginUser" runat="server"> 
    <LayoutTemplate> 
    <asp:Panel ID="LoginPanel" runat="server" DefaultButton="LoginButton"> 
     <other stuff here like username and password textboxes> 
     <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In"/> 
    </asp:Panel> 
</LayoutTemplate> 

Problemi correlati