2010-07-13 26 views
10

Tengo un asp estándar: control de entrada:Permitir la tecla Entrar para iniciar sesión en asp.net?

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

En Internet Explorer, al pulsar Intro no enviar el formulario, pero IE emite un pitido a mí 10 veces rápidamente. En otros navegadores, Enter funciona perfectamente bien y envía el foro como es de esperar.

He visto this question pero eso solo funciona cuando tienes un elemento de formulario real con un botón real, no el control de inicio de sesión como un todo.

¿Por qué está siendo bloqueado en IE (y por qué 10 veces por alguna razón)? ¿Hay alguna solución?

Respuesta

10

En el diseñador de su control de inicio de sesión: "Convertir a plantilla". A continuación, en la carga de la página, establezca defaultButton de su formulario al encontrar 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> 

de código subyacente:

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

Gracias, funcionó! – DisgruntledGoat

0

Esto es un truco, pero proporcionará una solución alternativa a su problema con Internet Explorer.
Agregue un cuadro de texto a su página que está oculta de la 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;" /> 

Esto hará que Internet Explorer envíe de nuevo el par nombre/valor del control Web del botón al presionar Enter.

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

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

Algunas explicaciones serían buenas y también dónde colocarlas (por ejemplo, en el evento Page_Load). – Styxxy

0

Sé que esto es un post muy viejo, pero otra manera de hacer esto es mediante el usando un asp:Panel con DefaultButton establecido en la ID del botón th por lo que el usuario normalmente haga clic en para iniciar sesión:

<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> 

Cuestiones relacionadas