为什么 Enter 键在 Asp.Net 中启动模式

Why does `Enter` key launch modal in Asp.Net

我的 Asp.Net 应用程序中有一个登录页面。我注意到,当我在 usernamepassword 文本框中按下 Enter 键时,它会启动一个来自我的 Site.Master 页面的模式。我已经尝试了一些解决方案,包括向我的模态 Panel 添加一个默认按钮,以及尝试将 UseSubmitBehavior=false 应用于我的 asp:LinkButton 来启动模态。最后一种方法失败了,因为 asp:LinkButton 没有 UseSubmitBehavior。为什么会发生这种情况,我该如何解决?

Master.Site

  <asp:button id="hiddenButton" runat="server" style="display:none;" />
  <ajaxToolkit:ModalPopupExtender ID="uxReportModal" runat="server" PopupControlID="ReportPanel" TargetControlID="hiddenButton" CancelControlID="btnClose" BackgroundCssClass="modalBackground"> </ajaxToolkit:ModalPopupExtender>
  <asp:Panel ID="ReportPanel" runat="server" CssClass="modalPopupReport" align="center" style="display:none; text-align: left;" DefaultButton="hiddenButton">
  ....
     <div style="text-align:center; margin-bottom: 20px;">
        <asp:Button ID="btnSubmit" runat="server" Text="Submit" onClick="btnSubmit_Click"/>
        <asp:Button ID="btnClose" runat="server" Text="Close" />
     </div>               
  </asp:Panel>

注意:我也试过添加 javascript 解决方案,但这也不起作用。基本上它失败了,因为未定义文本框 ID,我不确定如何正确应用 example:

中的解决方案

LoginPage.aspx

<script>
    uxTextBoxUserName.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('"+Button1.UniqueID+"').click();return false;}} else {return true}; ");
</script>
....
<td class="style2">
  <asp:TextBox ID="uxTextBoxUserName" runat="server" Height="18px" Width="150px"></asp:TextBox>
</td>

我能够使用我的模态 Panel 上方的 "hiddenButton" 解决这个问题。这似乎是来自 LinkButton 的某种默认提交行为。我必须在我的表单包装器中设置“DefaultButton="hiddenButton"”,而不是面板。

<form runat="server" defaultbutton="hiddenButton">

然后,我禁用了"hiddenButton"。我不明白为什么 asp 控件中没有内置方法来禁用此行为,但这个 hack 有效。

 <asp:button id="hiddenButton" runat="server" type="button" Enabled="false" style="display:none;" />