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

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

新規登録して質問してみよう
ただいま回答率
85.47%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

ASP.NET

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

Q&A

解決済

1回答

4210閲覧

ASP.NET ポストバックについて

kazu0630

総合スコア26

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

ASP.NET

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

0グッド

0クリップ

投稿2021/02/16 14:16

編集2021/02/17 10:33

お世話になっております。

ASP.NETの学習を始めたばかりのものです。

書籍を用いて、現在学習を進めているのですが、ボタンを押下した際に、IsPostBackプロパティの結果がTrueになる理由が理解できておりません。

書籍によると、ポストバックは、「現在開いている自分自身のページにデータをポストすること」と記載してあります。

ここでいうデータというのは、以下の例でいえば、Page_Loadの処理やボタンクリックの処理の際に、Label1に対して設定する「 "初回のリクエスト"」「"2回目以降のリクエスト"」といった値(データ)ではなく、「Page_Loadを行う」や「ボタンクリックがクリックされた」といったイベントが発生したという情報のことを指すという認識で良いのでしょうか。

VB

1Public Class PostBackTest 2 Inherits System.Web.UI.Page 3 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 4 If Not IsPostBack Then 5 Label1.Text = "初回のリクエスト" 6 Else 7 Label1.Text = "2回目以降のリクエスト" 8 End If 9 End Sub 10 11 Protected Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click 12 'Label1.Text = DateTime.Now 13 If IsPostBack Then 14 MsgBox("ポストバックが発生しました") 15 End If 16 End Sub 17End Class

分かっていないことを改めて整理させていただきますと、以下の2点が分かっておりません。

①Buttonクリックの際にポストバックが発生する理由が分かっておりません。

ボタンクリックなどのイベントが発生した場合、イベント発生時の処理(ラベルに値を設定する等)の有無に関わらず、ポストバックが行われるという認識でよろしいのでしょうか。

②書籍に書いてある
ポストバックは、「現在開いている自分自身のページにデータをポストすること」
のデータというのが何を指しているのが分かっておりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

guest

回答1

0

ベストアンサー

何が分からないのか分からないのですが・・・

デバッガを使ってブレークポイントを Page_Load の一行目に設定して、デバッグ実行してみてください。

実行して一番最初に初期画面が表示される際は IsPostBack は false になって、Button クリックなどで form を submit するとポストバックされて IsPostBack は true になります。それで説明になってませんか?

【追記】

①Buttonクリックの際にポストバックが発生する理由が分かっておりません。ボタンクリックなどのイベントが発生した場合、イベント発生時の処理(ラベルに値を設定する等)の有無に関わらず、ポストバックが行われるという認識でよろしいのでしょうか。

ポストバックが起こるのは、ブラウザがそのように動くよう ASP.NET が form と Button を html ソースに変換して、その html ソースを応答としてブラウザに送るからです。

ラベルの設定云々の話はポストバックとは全く関係ないです。

そのあたりはブラウザの動作(特に POST 関係)と html ソースがある程度分かってないと理解できないかもしれません。よくわかっていなければ別途勉強してもらうとして、ASP.NET Web Forms アプリの具体例で以下に説明しておきます。

以下のコードは WebForm19.aspx という名前のページを Visual Studio 2019 で作った ASP.NET Web Forms アプリに追加し、ツールボックスから Button を一つドラッグ&ドロップしただけのものです。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm19.aspx.cs" Inherits="WebApplication1.WebForm19" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form> </body> </html>

ASP.NET が上記のページを html ソースにレンダリングすると以下の通りとなります。上の form と Button がどのように変換されているかに注目してください。ここから先はブラウザの動作の話です。

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title> </title></head> <body> <form method="post" action="./WebForm19.aspx" id="form1"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="B7a8j6Juugr7KgSCmj6zUDWvM9KGDogdV/X3Zzebf9yq+7RJ+gEYdQS4STkR4VcLkaUd66QA0dZ4yIJ6L0t58TF1wytSzxAGfU/JetstUBw=" /> </div> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="11AA6BE6" /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="Mp684cdPj5JorZxyFPSnqdPxsh6JMbrnRBk1T6QAuJiYNdCI3AcZeuSvHJMr8ZhCyemiPxDs1aWwDFwnx3NySIf1SSgH7MSDepsgWIGlUrAIe0VbpzX56Xln+SYCygkL" /> </div> <div> <input type="submit" name="Button1" value="Button" id="Button1" /> </div> </form> </body> </html>

form 要素の method 属性が post で、action 属性が ./WebForm19.aspx すなわち自分自身になってます。

Button コントロールは input type="submit" という html 要素になっており、クリックすると form を submit します。その際、上の from 要素の method 属性と action 属性に従った動作になりますので、自分自身に post される、即ちポストバックが起こるということです。

②書籍に書いてあるポストバックは、「現在開いている自分自身のページにデータをポストすること」のデータというのが何を指しているのが分かっておりません。

そのデータというのは、上の html ソースの例で言うと input 要素の name 属性と value 属性の値です。post 送信なので application/x-www-form-urlencoded 形式で form データとして name=value という形でサーバーに送信されます。具体的には以下の画像の赤枠部分を見てください(Fiddler でブラウザからの要求をキャプチャしたもの)

イメージ説明

上の例ではピンとこないかもしれませんね。であれば、上の .aspx ページに TextBox を追加することを考えてみてください。TextBox は input type="text" と要素になります。なので、それにユーザーが文字を入力して Button をクリックしたとすると、その情報も name=value という形でサーバーに送信されます。

投稿2021/02/16 14:38

編集2021/02/17 01:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kazu0630

2021/02/16 15:17

ご回答いただき、ありがとうございます。 また、質問の内容が不明瞭で申し訳ありません。 ご説明していただいたことに関しては、確認ができております。 分かっていないことを改めて整理させていただきますと、以下の2点が分かっておりません。 ①Buttonクリックの際にポストバックが発生する理由が分かっておりません。 ボタンクリックなどのイベントが発生した場合、イベント発生時の処理(ラベルに値を設定する等)の有無に関わらず、ポストバックが行われるという認識でよろしいのでしょうか。 ②書籍に書いてある ポストバックは、「現在開いている自分自身のページにデータをポストすること」 のデータというのが何を指しているのが分かっておりません。 以上、2点をご回答いただけますと幸いです。 上記の内容で、まだ不明な点がありましたら、お手数ですが、何度かコメント上でやりとりをさせていただけますと幸いです。
退会済みユーザー

退会済みユーザー

2021/02/16 23:41

上のコメントに書いたことを質問欄を編集して追加情報として追記願います。
退会済みユーザー

退会済みユーザー

2021/02/17 01:43

コメントの ① と ② の返答は質問欄に追記しておきます。 上の私のコメントでお願いした「上のコメントに書いたことを質問欄を編集して追加情報として追記願います」をやってくださいね。Teratail は情報共有を目的としているそうですので、その意味で質問内容を、後で検索などでここを訪れた人が上から読んでいって話が分かるよう、明確にするのは重要だと思います。
kazu0630

2021/02/17 11:02

ご回答いただき、ありがとうございました。 質問をするために分からないところを文章化するのに手間取っていたぐらいの状態でしたが、大変丁寧に説明してくださったおかげで、理解することができました。 また、この度、ご回答いただきましたおかげで、Fiddlerというツールがあることも知ることができ、早速使ってみて確認をしてみたところ、理解が深まりました。 本当にありがとうございました。 また、追記の件、対応致しました。 また、機会がありましたら、ご回答いただけますと幸いです。 この度は、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問