デフォルト・ボタンとは?
http://www.atmarkit.co.jp/fdotnet/dotnettips/731aspajaxfocus/aspajaxfocus.htmlより * [Enter]キーを押下した場合に、該当するボタンにフォーカスが当たっていなくてもクリックされたものと見なされるボタン で、こいつが結構やっかい。
特徴
* typeがSubmitになっているボタンはデフォルトボタンの対象になる * サポートされるのは、Button および ImageButton コントロールのみ(LinkButton コントロールはサポート外っぽい)
参考文献
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.panel.defaultbutton.aspx設定方法
Me.Form.DefaultButton = Me.【ボタンID】.UniqueID
参考文献
http://www.wednesdaymoon.net/kzweb/articles/aspnet/article.aspx?articleid=40http://chang777.blog108.fc2.com/blog-entry-34.html#pagetop
デフォルト・ボタンを抑止する
案[1]HTMLタグを使用する
http://d.hatena.ne.jp/shige3110/20060609/1149836243* 「ImageButton コントロール→imgタグ」「Buttonコントロール→buttonタグ」に変更し、ServerClickを使用する * ServerClickについては以下を参照。http://msdn.microsoft.com/ja-jp/library/system.web.ui.htmlcontrols.htmlbutton.serverclick%28v=vs.80%29.aspx
案[2]ダミーボタンを使用する
* 以下のようなダミーボタンを追加し、Form.DefaultButtonにダミーボタンを設定 + CSS で非表示にする(「注意」参照のこと) + ポストバックしないように「OnClientClick="return false;"」とする * 実システムならマスターページに組み込むのもあり。
注意
* ダミーボタンをおいて、そのボタンをVibible=Falseにし、Form.DefaultButtonにダミーボタンを設定してもダメ(クライアント側ではVibible=Falseのものは生成されてこない)
サンプル
* マスターページに組み込んでいたら、システム共通になる<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm4.aspx.vb" Inherits="WebApplication1.WebForm4" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="">http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <style type="text/css"> .hide { visibility:hidden; } </style> </head> <body> <form id="form1" runat="server" defaultbutton="Button5"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> <asp:Button ID="Button1" runat="server" Text="Button" /> <br /> <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton> <br /> <asp:Button ID="Button2" runat="server" Text="Button" /> <br /> <button id="Button4" onserverclick=" button4_Click" runat="server">button</button><br /> <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/expand.jpg" Width="16px" /> <br /> <asp:Button ID="Button3" runat="server" Text="Button" Visible="False" /> <br /> <asp:Button ID="Button5" runat="server" Text="ダミー隠しボタン" CssClass="hide" OnClientClick="return false;" /> </div> </form> </body> </html>
補足
* 感想として、デフォルト・ボタンの抑制はあくまで緊急処置であって、できれば設計段階でどれをデフォルトボタンにするかを決めておくのがBetterであると感じた。
サンプル:ServerClickについて
■デザイン <button id="Button1" onserverclick=" button1_Click" runat="server">button</button><br /> ■コード Sub button1_Click(Source As Object, E As EventArgs) Me.Label1.Text = "Press Button1" End Sub
Enter キーでの Submit を抑止する
form1.Attributes("onkeydown") = "if(event.keyCode==13){ if(window.event.srcElement.type!='submit' && window.event.srcElement.type!='textarea'){ return false; } }"