Allow Enter key to login in asp.net?

2019-02-09 01:21发布

I have a standard asp:login control:

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

In Internet Explorer, pressing Enter does not submit the form, but IE beeps at me 10 times rapidly. In other browsers Enter works perfectly fine and submits the forum as you'd expect.

I've seen this question but that only works when you have actual form element with an actual button, not the login control as a whole.

Why is it being blocked in IE (and why 10 times for some reason)? Is there a workaround?

4条回答
太酷不给撩
2楼-- · 2019-02-09 01:41

In the designer of your Login control: "Convert To Template". Then in the Page Load set the defaultButton of your form by finding the 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;
    }
查看更多
姐就是有狂的资本
3楼-- · 2019-02-09 01:46

I know this is a super old post, but another way to do this is by using an asp:Panel with DefaultButton set to the ID of the button that the user would normally click on to log in:

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

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-02-09 01:49
Button lbButton = Login1.FindControl("LoginButton") as Button;

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
contentPlaceHolder.Page.Form.DefaultButton = lbButton.UniqueID;
查看更多
老娘就宠你
5楼-- · 2019-02-09 01:53

This is a hack, but it will provide a work around for your issue with Internet Explorer.
Add a text box to your page that is hidden from view.

<!-- 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;" />

This will cause Internet Explorer to send back the Button Web control's name/value pair upon hitting Enter.

查看更多
登录 后发表回答