我想防止ASP.NET GridView对输入按钮做出反应
时间:2020-03-06 14:54:41 来源:igfitidea点击:
我有一个ASP.NET页,上面带有gridview控件,并带有一个带有删除和选择命令的CommandButton列。
按下回车键会触发gridview中的第一个命令按钮,从而删除一行。我不希望这种情况发生。我可以更改gridview控件,使其不再对按Enter键做出反应吗?
屏幕上也有一个文本框和按钮。他们不需要对按下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>
解决方案
在Page_Load中,将焦点设置在文本框上。
有时我也会遇到类似这样的愚蠢问题……但是通常我只是实施一个快速hack,然后继续:)
myGridView.Attributes.Add("onkeydown", "if(event.keyCode==13)return false;");
这样的事情应该起作用。
这是一个很好的jQuery实现方法。此函数将自动将keydown事件处理程序添加到页面上的所有TextBox中。通过使用不同的选择器,我们可以将其控制到或者多或者少的粒度级别:
//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控件的优点。
该解决方案阻止了整个页面上的回车键
禁用输入键
对于其他有同样问题的人(此代码不能阻止事件触发),这对我有用:
if (window.event.keyCode == 13) {
event.returnValue=false;
event.cancel = true;
}

