前提・実現したいこと
ASP.NET、VisualStudio、C#、JavaScript を使用して会員登録サイトの様な簡易Webアプリを作っています。DBは使っておりません。
ボタンをクリックした後に、テキストボックスに入力した値が画面上に表示されるはずなのですが、Enterキーを押しただけで勝手に画面上に表示されてしまいます。
どうすれば 「ボタンクリック→ダイアログ表示→OKをクリック→テキストボックスの値を画面に表示する」の順序を固定出来ますでしょうか。
よろしくお願いします。
発生している問題・エラーメッセージ
エラーは起きておりません。
該当のソースコード
C#
protected void Button1_Click(object sender, EventArgs e)
{
string scriptText = "return confirm('登録いたします。よろしいですか??')";
ClientScript.RegisterOnSubmitStatement(this.GetType(), "ConfirmSubmit", scriptText);
string textvalue1 = TextBox1.Text; Label1_Output.Text = textvalue1; string textvalue2 = TextBox2.Text; Label2_Output.Text = textvalue2; string textvalue3 = TextBox3.Text; Label3_Output.Text = textvalue3; string textvalue4 = TextBox4.Text; Label4_Output.Text = textvalue4; string textvalue5 = TextBox5.Text; Label5_Output.Text = textvalue5;
}
補足情報(FW/ツールのバージョンなど)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
.NetFramework2.0以上であることが前提となりますが
ボタンのuseSubmitbehaviorプロパティをfalseにしてみてください。
こうすることで、ボタンがinput type=buttonとしてレンダリングされるようにになるので、
Enterキー押下でjsのsubmitイベント発生してしまう
ということはなくなると思います。
追記
回答が部分的であったため補足いたします。
実装方法はいくつも考えられますので、一例として参考にしてください。
確認ダイアログの表示をaspx側に移動するため、C#に記述されている以下の2行を削除します。
C#
1string scriptText = "return confirm('登録いたします。よろしいですか??')"; 2ClientScript.RegisterOnSubmitStatement(this.GetType(), "ConfirmSubmit", scriptText);
また、aspxのButton1に以下のように2つのプロパティを追加します。
aspx
1UseSubmitBehavior="false" 2OnClientClick="if(!confirm('登録いたします。よろしいですか??'))return false"
UseSubmitBehaviorは先の回答のとおり、Button1をsubmitではなくbuttonとして動作させるためのものです。
OnClientClickは、C#側で削除した2行に相当する処理をaspx側に移動したものです。
ここでif~return falseをしている理由ですが、
Button1をsubmitではなくbuttonにしたことにより、ポストバックがhtmlの標準動作ではなくボタンクリック時のjavascriptによって実現されるようになるため、
確認ダイアログをキャンセル時、後続するjavascriptによるポストバック処理もあわせてキャンセルする必要があるためです。
投稿2018/08/08 09:34
編集2018/08/08 23:11総合スコア136
0
ボタンをクリックした後に、テキストボックスに入力した値が画面上に表示されるはずなのですが、Enterキーを押しただけで勝手に画面上に表示されてしまいます。
「Enterキーを押しただけ」とありますが「ボタン」にフォーカスが当たっているときに Enter キーを押すのはマウスで「ボタン」をクリックするのと同じ結果になります。
一般的なブラウザとしては当然の動きなので、即ち一般ユーザーはそういう動きを期待しているはずなので、そこはそのままにしておいた方がよさそうです。
どうすれば 「ボタンクリック→ダイアログ表示→OKをクリック→テキストボックスの値を画面に表示する」の順序を固定出来ますでしょうか。
「ダイアログ」というのは JavaScript の confirm で表示されるもののことを言っているのですよね?
であれば、Button1_Click メソッドで JavaScript を登録しても意味はありません。Button1_Click メソッドの以下のコードは削除してください。
string scriptText = "return confirm('登録いたします。よろしいですか??')"; ClientScript.RegisterOnSubmitStatement(this.GetType(), "ConfirmSubmit", scriptText);
その代わりに、.aspx のコードで、Button コントロールの OnClientClick プロパティに confirm を表示するための JavaScript を設定します。以下のような感じです。
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" OnClientClick="return confirm('登録いたします。よろしいですか??');" />
これで「ボタン」クリックすると(もしくは「ボタン」にフォーカスが当てっているときに Enter キーを押すと)、confirm によって「ダイアログ」が表示されます。
「ダイアログ」の[OK]をクリックするとポストバックがかかり、Button1_Click メソッドに制御が飛ぶはずです。
「ダイアログ」の[キャンセル]をクリックするとポストバックはキャンセルされて何も起こりません。
投稿2018/08/08 07:37
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/09 02:29
2018/08/13 04:08
0
こういうのは普通jQueryのDeffered使うんでは。
あとASP.NETのポストバックの仕組みはクズなので他のフレームワークに乗り換えることをお勧めします。
投稿2018/08/13 04:14
総合スコア514
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/13 04:38
2018/08/13 05:01
退会済みユーザー
2018/08/13 05:14
2018/08/13 08:31
退会済みユーザー
2018/08/13 09:54
2018/08/13 11:26 編集
退会済みユーザー
2018/08/13 12:07
2018/08/13 15:34
退会済みユーザー
2018/08/14 01:29
2018/08/14 10:10
退会済みユーザー
2018/08/14 10:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/08 14:18
2018/08/08 23:05
2018/08/09 00:50
2018/08/09 01:03
退会済みユーザー
2018/08/09 01:53