2010-07-13 19 views
10

J'ai un asp standard: contrôle de connexion:Autoriser la touche Entrée pour se connecter à asp.net?

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

Dans Internet Explorer, appuyez sur Entrée ne présente pas la forme, mais IE émet un signal sonore me 10 fois rapidement. Dans les autres navigateurs, Enter fonctionne parfaitement et soumet le forum comme vous le souhaitez.

J'ai vu this question mais cela ne fonctionne que lorsque vous avez un élément de formulaire réel avec un bouton réel, pas le contrôle de connexion dans son ensemble.

Pourquoi est-il bloqué dans IE (et pourquoi 10 fois pour une raison quelconque)? Y at-il un travail autour?

Répondre

10

Dans le concepteur de votre contrôle Login: "Convert To Template". Ensuite, dans le chargement de la page, définissez le defaultButton de votre formulaire en recherchant le 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> 

code-behind:

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

Merci, ça a marché! – DisgruntledGoat

0

Il s'agit d'un hack, mais il vous permettra de contourner votre problème avec Internet Explorer.
Ajoutez une zone de texte à votre page qui est masquée. Cela entraînera Internet Explorer à renvoyer la paire nom/valeur du contrôle Button Web en appuyant sur Entrée.

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

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

Une explication serait bien et aussi où la mettre (par exemple dans l'événement Page_Load). – Styxxy

0

Je sais que c'est un super vieux poste, mais une autre façon de faire est par en utilisant un asp:Panel avec DefaultButton réglé sur l'ID du bouton à l'utilisateur normalement cliquez sur pour vous connecter:

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