【问题标题】:Capturing the Enter key when editing a GridView textbox编辑 GridView 文本框时捕获 Enter 键
【发布时间】:2008-11-03 13:49:33
【问题描述】:

我有一个这样定义的 GridView:

<asp:GridView ID="myGridView" ruant="server">
    <asp:BoundField DataField="myField" />
    <asp:CommandField ShowDeleteButton="true" ShowEditButton="true" />
</asp:GridView>

使用“编辑”按钮将一行置于编辑模式后,如何捕获 Enter 键并在该行上触发生成的更新?现在,如果我按 Enter 键,页面会重新加载,输入到 TextBox 中的内容会丢失,并且该行仍处于编辑模式。我知道如何在表单上disable the enter key entirely(当前解决方法),但我想让它触发更新命令。

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    好吧,使用您链接的问题中的知识,这很简单:

    string js = "if (event.keyCode == 13) this.form.submit();"
    myGridView.Attributes.Add("onkeydown", js);
    

    正如我们在 cmets 中发现的,这引入了一个小问题。 GridView_RowUpdating 服务器事件不再触发,但问题作者依赖它。

    简而言之-服务器事件模型依赖于要设置的表单字段__EVENTTARGET。仅调用form.submit() 时不会发送此表单字段。一种解决方案是使用 JavaScript “单击”相关按钮。

    string js = "if ((event.which && event.which == 13) || " 
                + "(event.keyCode && event.keyCode == 13)) "
                + "{document.myForm.Update.click();return false;} "
                + "else return true;";
    myGridView.Attributes.Add("onkeydown", js);
    

    请参阅 AllAsp.net 上的 "Using the enter key to submit a form",其中更详细地介绍了该问题。

    【讨论】:

    • 不,这只是模仿没有“onkeydown”事件的行为。
    • 你能解释一下吗?对我来说,这会提交表单。
    • (请检查“提交”按钮是否未命名为“提交”,因为它会覆盖 form.submit() 函数。)
    • 不,在这种情况下,按钮被命名为更新。提交表单不会触发底层更新发生的 GridView_RowUpdating 事件。
    • 可以,但是不触发事件写入新值,和刷新页面没什么区别。
    【解决方案2】:

    将页面上按钮的“UseSubmitBehavior”属性设置为“False”(默认为True) 解决了几个 cmets 中的提交问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多