2010-07-13 30 views
10

Tôi có một asp tiêu chuẩn: kiểm soát đăng nhập:Cho phép nhập khóa để đăng nhập trong asp.net?

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

Trong Internet Explorer, nhấn Enter không gửi biểu mẫu, nhưng IE tiếng bíp lúc tôi 10 lần nhanh chóng. Trong các trình duyệt khác Enter hoạt động hoàn toàn tốt đẹp và gửi các diễn đàn như bạn mong đợi.

Tôi đã xem this question nhưng chỉ hoạt động khi bạn có phần tử biểu mẫu thực tế với nút thực, không phải là toàn bộ kiểm soát đăng nhập.

Tại sao nó bị chặn trong IE (và tại sao 10 lần vì một lý do nào đó)? Có cách giải quyết nào không?

Trả lời

10

Trong trình thiết kế Kiểm soát đăng nhập của bạn: "Chuyển đổi thành mẫu". Sau đó, trong Tải trang, hãy đặt defaultButton biểu mẫu của bạn bằng cách tìm kiếm 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

Cảm ơn, nó làm việc! – DisgruntledGoat

0

Đây là một hack, nhưng nó sẽ cung cấp một công việc xung quanh cho vấn đề của bạn với Internet Explorer.
Thêm hộp văn bản vào trang của bạn bị ẩn khỏi chế độ xem.

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

Điều này sẽ khiến Internet Explorer gửi lại tên/cặp giá trị của nút điều khiển Web khi nhấn Enter.

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

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

Một số giải thích sẽ tốt đẹp và cũng là nơi để đặt nó (ví dụ trong sự kiện Page_Load). – Styxxy

0

Tôi biết đây là một bài siêu cũ, nhưng một cách khác để làm điều này là bởi sử dụng số asp:Panel với DefaultButton được đặt thành ID của nút thứ tại người dùng thông thường sẽ click vào để đăng nhập:

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

Các vấn đề liên quan