4月13日(木)1、2コマ目
今日、やったこと
- GETコマンドとPOSTコマンドリクエスト時の違い
- インスタンス生成
- リクエスト時の処理
今日のホワイトボード
GETコマンドでリクエストすると
デバッグ実行やブラウザにURLを入力してページを表示する、リンクをクリックするとHTTPのGETコマンドでリクエストする。
GETコマンドでリクエストされるとOnGet()メソッドが動く。
![]() |
| 図 GETコマンドでリクエスト=>OnGet()が動く |
POSTコマンドでリクエストすると
ボタンクリックすると、HTTPのPOSTコマンドでリクエストする。
このとき、<form></form>内で入力、選択した内容も一緒に送信される。
POSTコマンドでリクエストするとOnPost()メソッドが動く。
クライアントから送信されたデータはOnPost()の引数で受け取ることができる。
なお、引数名とname属性値を一緒にする必要がある。
![]() |
| 図 POST困んでリクエスト=>OnPost()が動く |
インスタンス生成
ちょこちょこ登場するインスタンス生成とは、メモリ上にクラスに必要なエリアを確保すること。
下図では、 new Item() でItemクラスのインスタンスを生成している。
![]() |
| 図 Itemクラスのインスタンス生成 |
XXクラス型の変数はXXクラスに必要なサイズではない。インスタンス生成されて確保されたXXクラスのエリアへの参照情報が格納される。ポインタ変数。
下図では ItemList.Add( ) でItemListに Itemクラスのインスタンスを追加している。
Add()の引数には new Item(xx, xx, xx) となっている。Itemクラスのインスタンスを生成し、Add()メソッドに渡している。
![]() |
| 図 ListクラスのItemListにItemクラスのインスタンスを追加 |
リクエスト時の処理
.Netでは、リクエスト毎にOnGet()やOnPost()のあるクラスのインスタンスを生成している。
1回目のリクエスト(下図ではGETコマンドでリクエスト)
①IndexModelクラスのインスタンスが生成
②OnGet()メソッドが動く
ここでItemListプロパティにListクラスのインスタンスが生成、セットされ、Itemクラスのインスタンスが追加される。
2回目のリクエスト(下図ではPOSTコマンドでリクエスト)
①IndexModelクラスのインスタンスが生成
②OnPost()メソッドが動く
OnGet()が動いていないため、ItemListプロパティはnullのまま。よって、エラー発生!!
![]() |
| 図 リクエスト毎にインスタンスが生成される |
エラー発生版
Item.cs
商品情報受け渡し用クラス。
商品情報の文字列を生成するToString()メソッドがある。
なお、ToString()メソッドには override をつける必要あり。(理由はそのうち話します)
Index.cshtml.cs
OnGet()メソッドにてItemListプロパティのインスタンス生成、要素追加をしている。
Index.cshtml
とくにややこしいことはないかと。
エラー解消版
変更したのはIndex.cshtml.cs。
コンストラクタ追加
コンストラクタにてOnGet()メソッドでやっていたItemListプロパティのインスタンス生成、要素追加




