ASP.NET GridViewがEnterボタンに反応しないようにしたい
-
02-07-2019 - |
質問
グリッドビューコントロールがあり、削除および選択コマンドがアクティブなCommandButton列があるASP.NETページがあります。
Enterキーを押すと、gridviewの最初のコマンドボタンが起動し、行が削除されます。私はこれが起こることを望まない。 Enterキーを押しても反応しないようにgridviewコントロールを変更できますか?
画面上にもテキストボックスとボタンがあります。 Enterキーを押すことに反応する必要はありませんが、テキストボックスに入力できる必要があります。現在、誤って削除しないように確認ダイアログをポップアップしますが、これよりも優れたものが必要です。
これは、asp.net updatepanel内にあることがわかるように、gridviewのマークアップです(申し訳ありませんが、言及するのを忘れていました):(ほとんどの列と書式設定を省略しました)
<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>
解決
このソリューションは、ページ全体でEnterキーをブロックしています
他のヒント
たまにこのような間抜けな問題が発生することもありますが、通常は簡単なハックを実装して先に進みます:)
myGridView.Attributes.Add("onkeydown", "if(event.keyCode==13)return false;");
そのようなものは動作するはずです。
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
Page_Loadで、テキストボックスにフォーカスを設定します。
これが、 jQuery の優れた方法です。この関数は、ページ上のすべてのTextBoxに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コントロールに自動的に適用されるという利点があります。
このコードがイベントの発生を妨げないという同じ問題を抱えている他の人にとって、これは私のために働いた:
if (window.event.keyCode == 13) {
event.returnValue=false;
event.cancel = true;
}