大変お世話になっております。
昨年は大変お世話になり、多大なご教授をいただきました。
本年も何卒よろしくお願いいたします。
前々からお聞きしようと思っていたのですが、
処理によってラベルの内容がすぐに反映しないのですが
どのようにすればすぐに反映するのでしょうか?
例えば下記のような場合は、ラベルの内容を初期化したいのですが、
それがされるのは、ボタンの処理後になります。
ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?
もしかしたら 大変初歩的な質問かもしれませんが、
何卒よろしくお願いいたします。
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles RecDateButton.Click
Me.Label1.Text = ""
ここからボタンの処理が開始します
End Sub
No.10ベストアンサー
- 回答日時:
クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。
<input type="submit" onclick="document.getElementById('Label1').innerText = ''">
サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。
protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "document.getElementById('" + Label1.ClientID + "').innerText = ''";
}
サーバー側イベントとクライアント側イベントは別物だといことを理解するべし。
ユーザーがボタンをクリック
→ボタンのクライアントイベント(onclick)
→formのsubmit
→ブラウザがPOST
→ASP.NETがポストバックを受け取る
→Page_Loadやらいろいろ
→ボタンのサーバーイベント(Click)
→Renderやらいろいろ
→ブラウザにHTMLを返す
→ブラウザ側の表示
todo36 さん お世話になります。
サンプルプログラムありがとうございました。
完全にやりたい事が実現できました。
ASP.Net には動作順番、Javaスクリプト、表示のさせ方など工夫と知識が必要だと改めて知る事ができました。
ありがとうございました。
No.9
- 回答日時:
> ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?
できません。
Button1_Click メソッドはサーバー側で動きますが、すべてのコードがサーバー側で実行されてからその結果としての html コードがブラウザに返されます。
そのへんは基本なので、勉強して理解してください。その理解がないと、いつまで経っても初心者レベルから抜け出せません。
(AJAX を使うという方法があるかもしれませんが、今回のケースで AJAX が使えるかはわかりません。)
この回答への補足
WebSurfer さん お世話になります。
なるほど裏技で逃げるとそこから抜け出せなくなるのかもしれませんね。今回の事で、クリックメソッドの動作の順番もお教えいただき改めて、結果としてHtmlとして出力され表示させるプロセスを理解いたしました。ただ、同じボタンを幾度かクリックする必要がある場合、その結果を表示するラベルの値をクリック時にクリアするなどの処理は必須かなと思い今回の質問にいたしました。ASPの概念として今回のような場合、どのように処理を進めればよかったのかなどご指摘がありましたら、お教えくださいますようよろしくお願い申し上げます。
No.8
- 回答日時:
kokorone です。
RecDateButtonのOnClickイベントではなく、RecDateButtonのサーバー側処理に埋め込むのです。サンプルを作成してみました。
サーバー側は、VBで作成しています。
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles RecDateButton.Click
Me.Label1.Text = ""
'ここから
'ボタンクリックのJavaScriptを埋め込みます。
Dim script As New System.Text.StringBuilder
script.Append("<script>")
script.Append("var ButtonSub = document.getElementById('" & ButtonSub.ClientID & "');" & vbCrLf)
script.Append("ButtonSub.click();" & vbCrLf)
script.Append("" & vbCrLf)
script.Append("</script>" & vbCrLf)
'二重登録防止の判定
If (Not ClientScript.IsClientScriptBlockRegistered("sub001")) Then
ClientScript.RegisterStartupScript(Me.GetType, "sub001", script.ToString)
End If
'ここまで
End Sub
この回答への補足
kokorone さん 大変お世話になります。
コーディング例も記載していただき、誠にありがとうございました。
上記プログラムで疑似的にボタンクリックでラベルの値をクリアすることができました。
ありがとうございました。
ただ、問題が2点ほどございました。
(1) ボタンをVisible を False にするとエラーになってしまいます。 うまく隠す方法が必要。
(2) マスターページに NavigationMenu があるとクリック後の処理が終わるまでメニューが(通常横並び)縦に表示されてしまう点がありました。
(1)に関してはなんとかできそうですが、(2)に関してはお手上げな感じです。もし(2)に関しまして何か解決策がございまいたら、改めてご指摘いただけますようよろしくお願いいたします。
No.6
- 回答日時:
1)見えないボタンを設置する
2)既存の可視ボタンをクリックしたとき、ラベルをクリアする。さらに、JavaScriptで、見えないボタンをクリックさせる
3)見えないボタンのサーバー側のクリックイベントで、従来のボタンイベントを行う。
この方法なら、お望みの処理が実現できます。
お断り:諸事情により、昼間は、このサイトへの投稿ができないため、補足があれば、夜間とさせていただきます。
この回答への補足
kokoroneさん お世話になります。
補足対応の件、了解いたしました。
ありがとうございます。
ButtonSubというボタンを作成し、VisibleをFalseにし、クリックイベントにプログラムを記述しました。
このボタンクリックを呼び出すメソッドを、元のボタンのButton1 のOnClientClick に
document.getElementById('ButtonSub').click();
上記を設定し実行してみたのですが、エラーが表示されました。
0x800a138f - Microsoft JScript 実行時エラー: プロパティ 'click' の値を取得できません: オブジェクトは Null または未定義です。
と表示されたのですが、上記スクリプトに間違いがあるのでしょうか?
もしかして まったく勘違いしておりましたでしょうか?
何卒よろしくお願いいたします。
No.5
- 回答日時:
くみたててるスクリプトは処理の部分だけで関数名とかが書いてないので、それを追加しましょう。
あと、スクリプトの出力はASP.NETがもともと持っている機能としてのスクリプト出力を使うか、リテラルコントロールを適切な箇所にはって、そこに書き出してあげればOKです。
> submit="関数名()"
これ、大丈夫かな?
ASP.NETのボタンは状況により自動的にスクリプトをレンダリングすることもあるので、こういった追記は気をつけましょうね。
この回答への補足
onosさん お世話になります。
どこかに似たような具体例ってないでしょうか?
今回はハードルが高そうです;;
ちなみに、下記をPage_Load時に書いてみたのですが、動作しないみたいなのですが、やっぱり的外れなやり方でしょうか?
なかなか難しいです
Dim js As New System.Text.StringBuilder
With js
.Append("var doc = documnet;")
.Append("var value = "";")
.Append("var label = doc.getElementById('" & Me.Label1.ClientID & "');")
.Append("label.innerHTML = value;")
End With
Me.Button1.OnClientClick = js.ToString
No.4
- 回答日時:
> いろいろ調べ、下記を発見したのですが、Button1_Clickイベントに記述しても何も変わらないのですが、
これ、ブラウザ側で動作させるためのスクリプトを文字列として組み立ててるだけですね。
Button1_Clickイベントに記述しても意味ないです。
このスクリプトは事前にブラウザに出力しておく必要がありますし、ボタンクリック時にこのスクリプトを起動するための部分も書かないといけないです。
この回答への補足
onos さん お世話になります。
なるほど、そうでしたか・・・
ブラウザに事前に出力するということは、
aspx.vb に記述するのではなく、HTMLに直接記述する形になる感じでしょうか?
ボタンクリック時にスクリプトを起動するためには、以下で良いとして、
submit="関数名()"
------------------------------------------------
この部分をどうやって上の submit="関数名()" と関連させれば良いかなかなか難しいですね
Dim js As New System.Text.StringBuilder
With js
.Append("var doc = documnet;")
.Append("var value ="" ;")
.Append("var label = doc.getElementById('" & Me.Label1.ClientID & "');")
.Append("label.innerHTML = value;")
End With
No.3
- 回答日時:
> ボタンのクリックイベントの Me.Label1.Text = "" の後に、強制的にポストバックさせるなどの関数などないのでしょうか?
ちょっと混乱されているようです。
現状のプログラムの動きを解説すると、
ボタンクリック -> リクエストがサーバに投げられる-> イベントの処理開始 -> ラベルクリア -> ボタンの処理 -> サーバでの処理終了 -> ブラウザにHTMLを返す -> ブラウザ側の表示更新
こういう形になります。
私の提案としては、ボタンクリック直後にリクエストをサーバに投げる前にスクリプトでラベルをクリアしたらどうか? という話を書きました。
ASP.NET側のイベントは、サーバにリクエストがあがってこないことには開始されませんから、この中でブラウザ側の表示を変えよう、というのはもともとできない相談です。
なので、
「サーバ側の処理とブラウザ上での処理、その順番とかをよく考えてみてください。」
と書いた、ということになります。
この回答への補足
onos さん お世話になります。
なるほど、処理の順番がわかりました。
ご指摘通りだと、ASP.NETで何かしようにもできませんね!
いろいろ調べ、下記を発見したのですが、Button1_Clickイベントに記述しても何も変わらないのですが、もしかして記述する場所やタイミングが違うなどが原因でしょうか?
もしかしたら考え方自体間違っていたでしょうか?
何かございましたら、ご指摘いただけますと助かります。
Dim js As New System.Text.StringBuilder
With js
.Append("var doc = documnet;")
.Append("var value ="" ;")
.Append("var label = doc.getElementById('" & Me.Label1.ClientID & "');")
.Append("label.innerHTML = value;")
End With
No.2
- 回答日時:
> 例えば下記のような場合は、ラベルの内容を初期化したいのですが、
> それがされるのは、ボタンの処理後になります。
> ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?
ボタンクリック時にJavaScriptでラベルの内容を書き換えておく、ぐらいしか対応できないかな?
サーバ側の処理とブラウザ上での処理、その順番とかをよく考えてみてください。
この回答への補足
onosさん 大変お世話になります。
今年もご指導お願いいたします。
ASP.netがサーバー処理ということですね!
関数を分けても同じなので、どうしたものかなと思っておりました。ボタンのクリックイベントの Me.Label1.Text = ""
の後に、強制的にポストバックさせるなどの関数などないのでしょうか?
なかなか難しいのですね
No.1
- 回答日時:
質問文中のコードによれば、ボタンクリックのイベントでクリアをしている
>ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?
という事は
ボタンのクリックイベントの前にクリアしたいということか?
イベントが発生する前には何の処理も出来ません
『ボタン処理の前』というのが具体的にはどのような意味で考えているのだろうか?
この回答への補足
trajaa さん お世話になります。
下記のようにイベントの中でのラベルの更新ということになります。
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles RecDateButton.Click
Me.Label1.Text = ""
ここからボタンの処理が開始します
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
textboxとLabelを動的に変更する
Microsoft ASP
-
TextChangeイベントが発生しない
JavaScript
-
PageLoadの後にJavascript実行したい
Microsoft ASP
-
-
4
ASP.NET(VB)VBソースからJavascriptの関数を呼ぶには
Microsoft ASP
-
5
ASP.NetのGridViewで任意の行クリックで選択を行う方法
Microsoft ASP
-
6
【C#】Page_Loadさせない方法について
その他(プログラミング・Web制作)
-
7
C# TEXTが空白であるLABELは何処に???
C言語・C++・C#
-
8
Webページ上のボタン等の位置を移動したい。
Microsoft ASP
-
9
ASP.NETでのメッセージ画面を出すには
Microsoft ASP
-
10
画面のリフレッシュを意図的に行いたい
Microsoft ASP
-
11
javascriptでASPにデータを渡す
JavaScript
-
12
GridViewの行選択イベントを発生させるには?
JavaScript
-
13
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
14
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
15
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
16
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
17
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
18
画面2分割
Microsoft ASP
-
19
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
20
DropDownListの初期値の設定(C#)
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA(エクセル)で自動的にボタン...
-
VBA シートのボタン名を変更し...
-
フォームの再読み込み
-
コマンドボタンやイメージにマ...
-
VBAで多数のプログラムを一つの...
-
CommandButtonのCaptionを変化...
-
MouseDownとMouseMoveイベント...
-
マクロでタイムレコーダーを作...
-
VBAのボタンの位置が変わって困...
-
セルをマクロのボタンにしたい。
-
アイコンとボタンの違い
-
ユーザーフォームに別シートか...
-
ボタンの表示を改行表示したい
-
教えてボタンの作り方について
-
[VB.net] ボタン(Flat)のEnable...
-
VBA CommandButtonの文字ずれ
-
Excel VBA Application.caller...
-
C# フォームを横にずらす
-
DO~LOOP でのLOOP...
-
オプションボタンによっての表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
フォームの再読み込み
-
アイコンとボタンの違い
-
VBAのボタンの位置が変わって困...
-
閉じると「+」になり開くと「-...
-
Excel VBA Application.caller...
-
Access VBA でデータペーストを...
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
VBAでオプションボタンによって...
-
ボタンをマウスで押し続けたと...
-
[Excel VBA]コマンドボタンの入...
-
VBA IE ダウンロード ダイアロ...
-
プロシージャからイベントをコ...
-
チェックボックスで指定出来る...
-
+ボタンの名称は?
-
VBA でのボタンの移動について
おすすめ情報