画面上にボタンが1つしかない場合、テキストエリアにカーソルがある状態で、
リターンキーをクリックすると、ボタンにフォーカスがいってしまって、
強制的にポストバックがかかってしまいます。
これがいやだ!という場合の回避策です。
・ 画面設計をみなおす
えーーーww
うそです。
いろいろな技術を駆使するとこんな感じで回避できます
・ASP.NET 2.0 からできるようになった、defaultbutton で、ダミーのボタンを設定。
<form id="form1" runat="server" defaultbutton="DummyButton">
・ダミーのボタンは、幅を0にして見えなくする(Width="0px")
・ダミーのボタンのポストバックを無効にする。(OnClientClickプロパティに「return false;」を設定)
ここまでやったあと、
やっぱり、ボタンにフォーカスを!
というケースでは、コードでこんな感じにします。
his.Form.DefaultButton = コントロールID.UniqueID;
マスターページの場合は、
base.Form.DefaultButton = コントロールID.UniqueID; //MasterPageの場合
ですかね。
以下、テキストボックス2個、見た目のボタン1個、ダミーボタン1個を張り付けたWebフォームのコード
Default.aspx
<form id="form1" runat="server" defaultbutton="DummyButton">
<div>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:Button ID="DummyButton" runat="server" OnClientClick="return false;" Text="Button"
Width="0px" /></div>
</form>
コードビハインド Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//base.Form.DefaultButton = Button1.UniqueID; //MasterPageの場合
this.Form.DefaultButton = Button1.UniqueID; <=== コメントアウトするとフォーカスがあたらない
}
protected void Button1_Click(object sender, EventArgs e)
{
this.TextBox1.Text = "ボタンが押された";
}
}
画面イメージ
ーーーーーーーーーーーーーー
ダミーボタンがいまいちいけてない気がします・・・・
もっといい対策があったらおしえてくださいーww