5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NET で Enter キーで意図しない Submit(PostBack)が発生する

Last updated at Posted at 2016-11-03

はじめに

ASP.NET では Enter キーで Web フォームを送信するようになっています。しかし、そうしたくない場合ももちろんあり、その方法もあります。ネットで検索するとすぐにその方法が見つかりますが、日本語でトップヒットする情報ではうまくいかないケースが発生したため、こちらに記します。

基本的な方法

ネットで検索すると、隠しボタンをデフォルトボタンにしてクリックイベントに return false; を設定するという方法がヒットします。

<form id="form1"
      runat="server" 
      defaultbutton="HiddenDummyButton">    <!-- ポイント -->
    <!--略-->
    <asp:Button ID="HiddenDummyButton" 
                runat="server" 
                Text="Button" 
                onClientClick="return false;" 
                style="display:none;" />    <!-- ポイント -->
    <!--略-->
</form>

概ねこの方法で問題ありません。

うまくいかないケース

この方法だけではうまくいかない場合が発生しました。画面上に表示されている別のボタンが勝手にデフォルトボタンのように振舞ってしまうのです。

ブラウザによってその振る舞いは違ったため、それはもちろん環境によります。しかし対象ユーザーの使うブラウザで発生したため、対策を取らざるを得ません。

生成された HTML を見てみると、該当するボタンの type が button ではなく submit になっています。これは普通に button になってほしいところ。

そのような場合は、画面上に配置したボタンすべてに UseSubmitBehavior=False を明示的に指定します。

    <asp:Button ID="TheButton1"
                runat="server" 
                Text="Button"
                UseSubmitBehavior="False" />    <!-- ポイント -->

こうすることで type=button のボタンになり、デフォルトボタンのような振る舞いはしなくなりました。

UseSubmitBehavior=False をしないと type=submit になるのは基本らしいので、こちらの対策が正道かもしれません。しかしダミーボタンがあれば「このフォームは Enter キーによる送信はしない」あるいは「Enter キー入力をどうするかはオレが決める」という意思がはっきり伝わります。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?