狛ログ

2014年8月10日日曜日

ASP.net EnterキーでのSubmit(ポストバック)制御。

オフィス狛 技術部です。

Webシステムで、EnterキーでのSubmitを制御したいという要望はよくあります。

色々と方法はありますが、JavaScriptで制御させる方法が多いと思います。

後は、ASP.netのコントロールであるButtonコントロールを使わず、htmlタグのbuttonタグを使う方法や、
ダミーボタンを用意し、FormのDefaultButtonに設定する、などです。

※ダミーボタンを作成する際は、ButtonコントロールのプロパティであるVibibleをFalseにしてはいけません。
VibibleがFalseになっているコントロールは、htmlに変換する際に対象外となるからです。


ただ、そのような要望が、開発の終盤に出てくると、修正も大変ですよね。

ASP.netを利用しているのであれば、Site.Masterに以下のような記載をすると、修正が1か所で済みます。
<div id="body">
    <asp:Panel ID="PanelDummy" runat="server" DefaultButton="ButtonDefault">
    <asp:ContentPlaceHolder runat="server" ID="FeaturedContent" />
    <asp:ContentPlaceHolder runat="server" ID="MainContent" />
    <asp:Button ID="ButtonDefault" runat="server" Text="" Width="0" Height="0" OnClientClick="return false;" style="visibility:hidden;" />
    </asp:Panel>
</div>
ContentPlaceHolderの部分は各画面で置き換えられるコンテンツ部分ですが、
そのコンテンツ部分をPanelコントロールで括っています。
そして、そのPanelにはデフォルトボタンが設定されていて、
そのボタンは OnClientClick="return false;" でSubmiteを無効にしています。

非表示についても、ボタンのプロパティではなく、CSSのstlye設定を利用しているところもポイントです。

EnterキーでのSubmit(ポストバック)は、利用する人によって、「必要だ」という意見もあれば、
「不要だ」という意見もあり、現場では正直困ってしまう事もあります・・・・。