Разрешить ввод ключа для входа в asp.net? - PullRequest
10 голосов
/ 13 июля 2010

У меня есть стандартный asp: контроль входа в систему:

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

В Internet Explorer нажатие клавиши Enter не отправляет форму, но IE быстро издает 10 звуковых сигналов. В других браузерах Enter отлично работает и отправляет форум, как и следовало ожидать.

Я видел этот вопрос , но он работает только тогда, когда у вас есть фактический элемент формы с реальной кнопкой, а не элемент управления входом в целом.

Почему он блокируется в IE (и почему по какой-то причине 10 раз)? Есть ли обходной путь?

Ответы [ 4 ]

10 голосов
/ 13 июля 2010

В конструкторе элемента управления Login: «Преобразовать в шаблон».Затем в загрузке страницы установите defaultButton формы, найдя 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>

Код сзади:

    protected void Page_Load(object sender, EventArgs e)
    {
        Button lbButton = Login1.FindControl("LoginButton") as Button;
        form1.DefaultButton = lbButton.UniqueID;
    }
0 голосов
/ 13 мая 2013

Я знаю, что это очень старая запись, но другой способ сделать это - использовать asp:Panel с DefaultButton, установленным на идентификатор кнопки, на которую пользователь обычно нажимал для входа в систему:

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

0 голосов
/ 05 февраля 2012
Button lbButton = Login1.FindControl("LoginButton") as Button;

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
contentPlaceHolder.Page.Form.DefaultButton = lbButton.UniqueID;
0 голосов
/ 13 июля 2010

Это взлом, но он предоставит решение вашей проблемы с Internet Explorer.
Добавьте текстовое поле на страницу, которое скрыто от просмотра.

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

Это приведет к тому, что Internet Explorer отправит обратно пару имя / значение веб-элемента управления Button при нажатии Enter.

...