【问题标题】:I want to prevent ASP.NET GridView from reacting to the enter button我想阻止 ASP.NET GridView 对输入按钮做出反应
【发布时间】:2008-09-30 07:36:54
【问题描述】:

我有一个 ASP.NET 页面,上面有一个 gridview 控件,其中有一个 CommandButton 列,其中删除和选择命令处于活动状态。

按 enter 键会触发 gridview 中的第一个命令按钮,这会删除一行。我不希望这种情况发生。我可以更改 gridview 控件,使其不再对按 Enter 键做出反应吗?

屏幕上还有一个文本框和按钮。他们不需要响应回车,但您必须能够填写文本框。目前我们会弹出一个确认对话框以防止意外删除,但我们需要比这更好的东西。

这是 gridview 的标记,您可以在 asp.net updatepanel 中看到它(我忘了提,抱歉):(我遗漏了大多数列和格式)

<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnFilter" />
            <asp:AsyncPostBackTrigger ControlID="btnEdit" EventName="Click" />
        </Triggers>
        <ContentTemplate>
            <div id="CodeGrid" class="Grid">
                <asp:GridView   ID="dgCode" runat="server">
                    <Columns>
                        <asp:CommandField SelectImageUrl="~/Images/Select.GIF"
                                            ShowSelectButton="True"
                                            ButtonType="Image"
                                            CancelText=""
                                            EditText=""
                                            InsertText=""
                                            NewText=""
                                            UpdateText=""
                                            DeleteImageUrl="~/Images/Delete.GIF"
                                            ShowDeleteButton="True" />
                        <asp:BoundField DataField="Id"  HeaderText="ID" Visible="False" />
                    </Columns>
                </asp:GridView>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>

【问题讨论】:

  • 我无法重现这一点,这让我相信 Gridview 之外的某些东西导致删除按钮响应 Enter 键。您是否在表单上运行了一些额外的 javascript。如果您可以发布您的标记,那也会很有帮助。

标签: asp.net-2.0


【解决方案1】:

偶尔我也会遇到类似这样的愚蠢问题......但通常我只是实施一个快速破解,然后继续前进:)

myGridView.Attributes.Add("onkeydown", "if(event.keyCode==13)return false;");

类似的东西应该可以工作。

【讨论】:

  • onkeydown 在所有浏览器上对常见输入元素的工作方式是否相同?由于一些 Firefox 怪癖,这里有人说要使用 onkeyup。
  • 我从来没有遇到过关于 onkeydown 的问题......而且自从我上次检查(大约一年前)以来,该代码在 IE、FF、Opera 和 Safari 中都有效。
  • 这对我不起作用。 onkeydown 事件正确呈现(当我检查查看源时它就在那里),但它不会阻止事件触发。
【解决方案2】:

此解决方案阻止整个页面上的回车键

Disable Enter Key

【讨论】:

    【解决方案3】:

    在 PreRender 事件中你可以切换

    Private Sub gvSerials_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvSerials.PreRender
        If gvSerials.EditIndex < 0 'READ ONLY MODE
            'Enables the form submit during Read mode on my 'search' submit button
            Me.bnSearch.UseSubmitBehavior = True
        Else 'EDIT MODE
            'disables the form submit during edit mode, this allows the APPLY/Update button to be activated after Enter Key is pressed (which really is creating a form submit)
            Me.bnSearch.UseSubmitBehavior = False
        End If
    

    【讨论】:

      【解决方案4】:

      在 Page_Load 中,将焦点设置在文本框上。

      【讨论】:

        【解决方案5】:

        这是一个很好的jQuery 方法。此函数将自动将 keydown 事件处理程序添加到页面上的所有文本框。通过使用不同的选择器,您可以或多或少地控制它:

        //jQuery document ready function – fires when document structure loads
        $(document).ready(function() {
        
           //Find all input controls of type text and bind the given
           //function to them
           $(":text").keydown(function(e) {
              if (e.keyCode == 13) {
                  return false;
               }
           });
        
        });
        

        这将使所有文本框忽略 Enter 键,并具有自动应用于您可能添加到页面(或可能由 ASP.Net 生成)的任何新 HTML 或 ASP.Net 控件的优点。

        【讨论】:

          【解决方案6】:

          对于遇到此代码无法阻止事件触发的相同问题的其他任何人,这对我有用:

          if (window.event.keyCode == 13) {    
              event.returnValue=false;     
              event.cancel = true;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-24
            • 2019-12-30
            • 1970-01-01
            • 2020-04-10
            • 2020-03-07
            • 1970-01-01
            • 1970-01-01
            • 2013-07-26
            相关资源
            最近更新 更多