2010-07-13 44 views
10

我有一个标准的asp:登录控件:允许输入密钥在asp.net中登录?

<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可以很好地工作,并按照您的期望提交论坛。

我见过this question但只有当你有一个实际的按钮,而不是登录控制作为一个整体的实际表单元素的作品。

为什么它在IE中被阻塞(以及为什么10次出于某种原因)?有没有解决方法?

回答

10

在您的登录控件的设计器中:“转换为模板”。然后在页面加载中,通过找到LoginButton来设置defaultButton

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

谢谢,它的工作! – DisgruntledGoat 2010-07-13 13:40:51

0

这是一个黑客攻击,但它可以解决您的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 Web控件的名称/值对。

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

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

一些解释会很好,也可以放在哪里(例如在Page_Load事件中)。 – Styxxy 2012-10-27 22:47:16

0

我知道这是一个超级老的职位,但另一种方式来做到这一点是使用asp:PanelDefaultButton设置为按钮th的ID在用户通常会点击登录:

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