teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記&訂正

2021/02/17 01:54

投稿

退会済みユーザー
answer CHANGED
@@ -71,7 +71,7 @@
71
71
 
72
72
  > ②書籍に書いてあるポストバックは、「現在開いている自分自身のページにデータをポストすること」のデータというのが何を指しているのが分かっておりません。
73
73
 
74
- 上の html ソーの例で言うと input 要素の name 属性と value 属性の値です。post 送信なので application/x-www-form-urlencoded 形式で form データとしてサーバーに送信されます。具体的には以下の画像の赤枠部分を見てください(Fiddler でブラウザからの要求をキャプチャしたもの)
74
+ そのデータというのは、上の html ソーの例で言うと input 要素の name 属性と value 属性の値です。post 送信なので application/x-www-form-urlencoded 形式で form データとして name=value という形でサーバーに送信されます。具体的には以下の画像の赤枠部分を見てください(Fiddler でブラウザからの要求をキャプチャしたもの)
75
75
 
76
76
  ![イメージ説明](2ed6181cc1f7a46b57e5b888b5172bd0.jpeg)
77
77
 

1

追記

2021/02/17 01:54

投稿

退会済みユーザー
answer CHANGED
@@ -2,4 +2,77 @@
2
2
 
3
3
  デバッガを使ってブレークポイントを Page_Load の一行目に設定して、デバッグ実行してみてください。
4
4
 
5
- 実行して一番最初に初期画面が表示される際は IsPostBack は false になって、Button クリックなどで form を submit するとポストバックされて IsPostBack は true になります。それで説明になってませんか?
5
+ 実行して一番最初に初期画面が表示される際は IsPostBack は false になって、Button クリックなどで form を submit するとポストバックされて IsPostBack は true になります。それで説明になってませんか?
6
+
7
+ **【追記】**
8
+
9
+ > ①Buttonクリックの際にポストバックが発生する理由が分かっておりません。ボタンクリックなどのイベントが発生した場合、イベント発生時の処理(ラベルに値を設定する等)の有無に関わらず、ポストバックが行われるという認識でよろしいのでしょうか。
10
+
11
+ ポストバックが起こるのは、ブラウザがそのように動くよう ASP.NET が form と Button を html ソースに変換して、その html ソースを応答としてブラウザに送るからです。
12
+
13
+ ラベルの設定云々の話はポストバックとは全く関係ないです。
14
+
15
+ そのあたりはブラウザの動作(特に POST 関係)と html ソースがある程度分かってないと理解できないかもしれません。よくわかっていなければ別途勉強してもらうとして、ASP.NET Web Forms アプリの具体例で以下に説明しておきます。
16
+
17
+ 以下のコードは WebForm19.aspx という名前のページを Visual Studio 2019 で作った ASP.NET Web Forms アプリに追加し、ツールボックスから Button を一つドラッグ&ドロップしただけのものです。
18
+
19
+ ```
20
+ <%@ Page Language="C#" AutoEventWireup="true"
21
+ CodeBehind="WebForm19.aspx.cs"
22
+ Inherits="WebApplication1.WebForm19" %>
23
+
24
+ <!DOCTYPE html>
25
+
26
+ <html xmlns="http://www.w3.org/1999/xhtml">
27
+ <head runat="server">
28
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
29
+ <title></title>
30
+ </head>
31
+ <body>
32
+ <form id="form1" runat="server">
33
+ <div>
34
+ <asp:Button ID="Button1" runat="server" Text="Button" />
35
+ </div>
36
+ </form>
37
+ </body>
38
+ </html>
39
+ ```
40
+
41
+ ASP.NET が上記のページを html ソースにレンダリングすると以下の通りとなります。上の form と Button がどのように変換されているかに注目してください。ここから先はブラウザの動作の話です。
42
+
43
+ ```
44
+ <!DOCTYPE html>
45
+
46
+ <html xmlns="http://www.w3.org/1999/xhtml">
47
+ <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>
48
+
49
+ </title></head>
50
+ <body>
51
+ <form method="post" action="./WebForm19.aspx" id="form1">
52
+ <div class="aspNetHidden">
53
+ <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="B7a8j6Juugr7KgSCmj6zUDWvM9KGDogdV/X3Zzebf9yq+7RJ+gEYdQS4STkR4VcLkaUd66QA0dZ4yIJ6L0t58TF1wytSzxAGfU/JetstUBw=" />
54
+ </div>
55
+
56
+ <div class="aspNetHidden">
57
+
58
+ <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="11AA6BE6" />
59
+ <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="Mp684cdPj5JorZxyFPSnqdPxsh6JMbrnRBk1T6QAuJiYNdCI3AcZeuSvHJMr8ZhCyemiPxDs1aWwDFwnx3NySIf1SSgH7MSDepsgWIGlUrAIe0VbpzX56Xln+SYCygkL" />
60
+ </div>
61
+ <div>
62
+ <input type="submit" name="Button1" value="Button" id="Button1" />
63
+ </div>
64
+ </form>
65
+ </body>
66
+ </html>
67
+ ```
68
+ form 要素の method 属性が post で、action 属性が ./WebForm19.aspx すなわち自分自身になってます。
69
+
70
+ Button コントロールは input type="submit" という html 要素になっており、クリックすると form を submit します。その際、上の from 要素の method 属性と action 属性に従った動作になりますので、自分自身に post される、即ちポストバックが起こるということです。
71
+
72
+ > ②書籍に書いてあるポストバックは、「現在開いている自分自身のページにデータをポストすること」のデータというのが何を指しているのが分かっておりません。
73
+
74
+ 上の html ソールの例で言うと input 要素の name 属性と value 属性の値です。post 送信なので application/x-www-form-urlencoded 形式で form データとしてサーバーに送信されます。具体的には以下の画像の赤枠部分を見てください(Fiddler でブラウザからの要求をキャプチャしたもの)
75
+
76
+ ![イメージ説明](2ed6181cc1f7a46b57e5b888b5172bd0.jpeg)
77
+
78
+ 上の例ではピンとこないかもしれませんね。であれば、上の .aspx ページに TextBox を追加することを考えてみてください。TextBox は input type="text" と要素になります。なので、それにユーザーが文字を入力して Button をクリックしたとすると、その情報も name=value という形でサーバーに送信されます。