質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

4回答

7417閲覧

C#、処理の順番を固定したい

lemon0502

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2018/08/08 06:34

前提・実現したいこと

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

.NetFramework2.0以上であることが前提となりますが
ボタンのuseSubmitbehaviorプロパティをfalseにしてみてください。
こうすることで、ボタンがinput type=buttonとしてレンダリングされるようにになるので、
Enterキー押下でjsのsubmitイベント発生してしまう
ということはなくなると思います。

https://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.button.usesubmitbehavior(v=vs.110).aspx


追記
回答が部分的であったため補足いたします。
実装方法はいくつも考えられますので、一例として参考にしてください。

確認ダイアログの表示を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
mitsu-wan

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/08 14:18

質問者さんがやりたいことを実現するにはポストバックする必要があるはずですが、それでは目的は果たせないのでは? どうするのでしょう?
mitsu-wan

2018/08/08 23:05

type=submitのままだと、入力項目にフォーカスがある状態でEnterキーを押下した場合もsubmitされてしまいます。 この動作は好まれないケースがありますので対策として書きましたが、 これだけでは質問者さんがやりたいこと全体のは実現できませんので不親切だったかもしれませんね。
lemon0502

2018/08/09 00:50

ただいま確認いたしました。無事、テキストボックス選択時にEnterキーをクリックしてもボタンの操作は行われず、「ボタンクリック→ダイアログ表示→OKをクリック→テキストボックスの値を画面に表示する」の順序を固定することが出来ました。ありがとうございました。
lemon0502

2018/08/09 01:03

また、「ボタンをクリックした後に、テキストボックスに入力した値が画面上に表示されるはずなのですが、Enterキーを押しただけで勝手に画面上に表示されてしまいます。」 ⇒「テキストボックス選択時、および何も無い空白の部分にマウスを置いている状態」とお伝えしたかったのです。私の言葉足らずです。申し訳ありません。ご回答ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/08/09 01:53

マイナス評価を外しました。 ただ、OnClientClick で設定したスクリプト if confrim('... と、UseSubmitBehavior="false" で設定されるスクリプト __doPostBack('... の順序がどうなるかが問題ですね。 実際、.NET 4.6.1 では、やってみると if confirm('... が先に来るので期待した動きにはなりますが、それを明記した Microsoft の文書が見つからない、変わるかもしれないという不安が自分にはあります。 もし、順序がどうなるかを書いた Microsoft の文書をご存知でしたら教えていただけると幸いです。
guest

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lemon0502

2018/08/09 01:04

こちらも確認させていただきました。ご指摘通りに試したところ、テキストボックス選択時にEnterキーをクリックしてもいきなり実行されるのではなくダイアログが出ました。複数のやり方を知る事が出来て楽しいです。勉強になりました。ありがとうございました。 また、「ボタンをクリックした後に、テキストボックスに入力した値が画面上に表示されるはずなのですが、Enterキーを押しただけで勝手に画面上に表示されてしまいます。」 ⇒「テキストボックス選択時、および何も無い空白の部分にマウスを置いている状態」とお伝えしたかったのです。私の言葉足らずです。申し訳ありません。ご回答ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/08/09 02:29

> 「テキストボックス選択時、および何も無い空白の部分にマウスを置いている状態」とお伝えしたかったのです。 テキストボックスにフォーカスが当たっているときも同様に Enter キーを推すと submit されますけど、それも一般的なブラウザとしては既定の動きです。 マウスを使わないで操作するユーザーはそういう動きを期待しているはずで、キーボードから手を放していちいちマウスを使わないダメとすると、ユーザーフレンドリーということからは逆行するかもしれませんね。 検証コントロールを使うとか、Wizard を使って最終確認画面を入れ込むとか、既定の動きをされても問題ないもしくは最小限に抑えることを検討した方が良いと思います。 でも、客の要求とかで問答無用&何が何でも Enter キーでの submit を無効にしたいということがあるかもしれませんね。 そういう場合は、form 要素の onsubmit 属性に Enter キーが押された場合は submit を中止するスクリプトを設定するのがよさそうです。 スクリプトの例は、「javascript」「enter」「無効」でググると使えそうなのがいろいろ見つかると思います。 スクリプトの form 要素 onsubmit 属性への設定は、Page_Load あたりで RegisterOnSubmitStatement を使って可能です。
lemon0502

2018/08/13 04:08

お返事が遅くなり申し訳ありません。 >マウスを使わないで操作するユーザーはそういう動きを期待しているはずで、キーボードから手を放していちいちマウスを使わないダメとすると、ユーザーフレンドリーということからは逆行するかもしれませんね。 盲点でした、こちらで提示していただいた点も確認してみます。ご指摘ありがとうございます。
guest

0

こういうのは普通jQueryのDeffered使うんでは。
あとASP.NETのポストバックの仕組みはクズなので他のフレームワークに乗り換えることをお勧めします。

投稿2018/08/13 04:14

tekka

総合スコア514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/13 04:38

使いこなせてないだけでは? それをクズというのはいかがなものかと思います。自分の能力不足ということはないと言い切れますか?
退会済みユーザー

退会済みユーザー

2018/08/13 05:14

クズとは一言も言ってない。本来ステートレスな Web アプリを、サーバーコントロール、ViewState、ポストバックという機能を利用してステートフルにし、さらに Windows アプリのようにイベントドリブンにしている。そのことを「偉大なうそ」と言っているのです。 上の回答やレスからあなたにはたぶん ASP.NET Web Forms アプリの知識はあまりないとお見受けしますが、そうであれば、質問者さんを惑わすような発言は控えていただきたいと思います。
tekka

2018/08/13 08:31

>Web Formsは偽物です。注意をそらせる手品でいっぱいの皿に置かれた詐欺包み偽コードソースの空事です。Web Formsでなにをやってもウェブでなにもできません。ただ自分のためにWeb Formsを使うのです。 これをクズと言い換えるか、クソと言い換えるかは各人の自由です。 しかし、とても肯定的な意味には読めませんね。 あと、私自身プロダクトでASP.NET WebFormsを5年ほど使用した経験があります。 その経験から、WebFormsは百害あって一利なしと判断しています。
退会済みユーザー

退会済みユーザー

2018/08/13 09:54

> 私自身プロダクトでASP.NET WebFormsを5年ほど使用した経験があります。その経験から、WebFormsは百害あって一利なしと判断しています。 5 年? ちょっと信じ難いですね。もし、5 年も Web Forms アプリ開発の実務経験があって、それで「百害あって一利なし」とか言ってるようですと、5 年もの長い間 Web Forms アプリのことを何も学習できなかったと言ってるのと同じです。 まぁ、あなたが個人的に、あなたの胸の中でどう考えようと勝手ですが、 > クズと言い換えるか、クソと言い換えるかは各人の自由です。 ということを他人が立てた ASP.NET Web Forms のスレッドで発言するのは自由ではないですね。汚い言葉は周りを不愉快にするから。 それ以前に、あなたの、 > こういうのは普通jQueryのDeffered使うんでは。 という回答は完全に的外れと認識してください。このスレッドの話は、ASP.NET Web Forms のサーバーコントロール、ViewSate、ポストバックという技術を使って、イベントドリブンな動作をさせることが前提です。 その次の行、 > あとASP.NETのポストバックの仕組みはクズなので他のフレームワークに乗り換えることをお勧めします。 はそれよりさらに的外れと認識ください。
tekka

2018/08/13 11:26 編集

まあ確かに、質問に真剣に回答したとは言えません。 質問者の方、ごめんなさい。 潰しの効かない技術、パフォーマンスを無視しがちな設計、汚いHTML、小回りの利かないところ WebFormsについて、言いたいことは沢山ありますね。 そこまで言うなら SuferOnWwwさんは随分WebFormsがお好きなようですから WebFormsのどこが素晴らしいかを語って頂くか 素晴らしさを語っているブログの一つでも教えて頂きたいものです。 >汚い言葉は周りを不愉快にするから。 先程から私を未熟だなんだと個人攻撃していらっしゃいますね。 私はASP.NETを攻撃していますが、あなたを罵ってはいません。 追記: ASP.NET MVCはクールだと思います。
退会済みユーザー

退会済みユーザー

2018/08/13 12:07

> まあ確かに、質問に真剣に回答したとは言えません。 そもそも、そこが私に言わせれば言語道断。真剣に回答できなければ回答するのは止めていただきたいと思います。 > そこまで言うなら > SuferOnWwwさんは随分WebFormsがお好きなようですから > WebFormsのどこが素晴らしいかを語って頂くか > 素晴らしさを語っているブログの一つでも教えて頂きたいものです。 自分は無駄な労力と時間を費やす気はしませんので悪しからず。 私が何を語ろうと、5 年の Web Forms アプリ開発の実務経験を通じて「百害あって一利なし」と思ってるあなたに理解してもらえるとは思えません。 ASP.NET Web Forms と MVC のアドバンテージ/ディスアドバンテージが議論したければ、ご自分で新たにスレッドを立てて質問するなどしてください。
mitsu-wan

2018/08/13 15:34

質問と無関係の論争を招く発言は控えた方がよろしいと思います。 現在ではWebFormsを選ぶメリットが殆どないのは明らかですが、それはこのフレームワークが出来た当時と現在ではニーズが違うためです。
退会済みユーザー

退会済みユーザー

2018/08/14 01:29

mitsu-wan さん> あなたのそのコメントも「質問と無関係の論争を招く発言」になっていると思います。 さらに、正直言うと、横レスしてきて上から目線発言されているように思えてなりません。
mitsu-wan

2018/08/14 10:10

SurferOnWwwさん> 横レスもなにも、ここはtekkaさんの回答に対してのコメントを書くところであり、先の私のコメントは貴方に向けたものではありません。 それを読み取れなかった結果、気分を害されたのであれば、私の配慮不足でしょうから、申し訳ありませんでした。
退会済みユーザー

退会済みユーザー

2018/08/14 10:18

すみません、思い違いしてました。お許しください。
guest

0

ボタンのクリックイベントで全て記述しないで、
ボタンのクリックイベント>ダイアログの表示(のみ)
ダイアログのOKボタンクリックイベント>テキストの値を表示
とする必要があります

投稿2018/08/08 06:58

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/08 07:38

質問者さんのやりたいことをそのままコピペしているだけで、回答になってないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問