HttpResponse.Status

HttpResponse.Statusでクライアントに返すHTTPレスポンスステータスの設定や取得ができる。

HttpResponse.Status プロパティ (System.Web) | Microsoft Docs

前回のリダイレクト前後でステータスがどうなってるか見てみる。
Default.aspx.csで、

Response.Redirectの前後に、Response.Statusを出力。
NextPage.aspx.csで、

こちらもResponse.Statusを出力。
今度はデバッガ起動で、

こうなる。
こうなる。

こうなる。
_Defaultは、リダイレクトの前は200で、リダイレクトで302になっていると思うが、その後の出力処理自体にはもう来ない。
で、NextPageは200。

Sample/aspnet/HttpResponse/Status/src/HttpResponse_ at master · bg1bgst333/Sample · GitHub

HandlerConditions

ソースコード上で、あるメニューアイテムに対するコマンドハンドラを定義するのではなく、動的にメニューアイテムとコマンドハンドラを紐づけたい。
そのために必要なのがHandlerConditions。
HandlerConditions.hで、

このような構造体を定義。
Window.hは、

WORD値をキー、HandlerConditions構造体ポインタを値とするm_mapHandlerMapを追加。
Window.cppは、

OnCommandの動作をこのように変更する。
MainWindow.hでは、

OnItem1_1の戻り値はintになり、OnCommand不要に。
MainWindow.cppは、

メニューアイテムとハンドラの追加と削除の処理。

選択すると
選択すると

選択すると、

ハンドラが反応する
ハンドラが反応する

ハンドラが反応する。

Test/winapi/HandlerConditions/HandlerConditions/src/HandlerConditions at master · bg1bgst333/Test · GitHub

HttpResponse.Redirect

リダイレクトによるページ遷移は、HttpResponse.Redirectで行う。

HttpResponse.Redirect メソッド (System.Web) | Microsoft Docs
第16回 ASP.NETにおけるページの遷移:連載 プログラミングASP.NET ―ASP.NETによるWebアプリケーション実践開発講座― (1/4 ページ) - @IT

Default.aspxは、

<title>が"Default"なぐらいで中身はない。
Default.aspx.csは、

Debug.WriteLineで"_Default.Page_Load"を出力した後、
Response.RedirectでNextPage.aspxにリダイレクトする。
ここで、

項目追加
項目追加

項目追加。

NextPage.aspx
NextPage.aspx

NextPage.aspx

こんな感じになる
こんな感じになる

こんな感じになる。
NextPage.aspxは、

<title>が"NextPage"。
NextPage.aspx.csは、

Debug.WriteLineで"NextPage.Page_Load"を出力。
デバッガで起動したら、そのままNextPage.aspxにリダイレクトしちゃうので、その後に、

URLバーをDefault.aspxにセットしなおして、
URLバーをDefault.aspxにセットしなおして、

URLバーをDefault.aspxにセットしなおして、

開発者ツールを起動して、ネットワークキャプチャ有効に
開発者ツールを起動して、ネットワークキャプチャ有効に

開発者ツールを起動して、ネットワークキャプチャ有効に。

この状態になったら、
この状態になったら、

この状態になったら、URLバーでリターンキー押してアクセス。

Default.aspxでは302、その後にNextPage.aspxで200。
Default.aspxでは302、その後にNextPage.aspxで200。

Default.aspxでは302、その後にNextPage.aspxで200。
302ということはLocationヘッダによってNextPage.aspxにリダイレクトされたってこと。
この時、

_Default.Page_Loadが呼ばれて、リダイレクトされて、NextPage.Page_Loadが呼ばれてるのがわかる。
_Default.Page_Loadが呼ばれて、リダイレクトされて、NextPage.Page_Loadが呼ばれてるのがわかる。

出力から、_Default.Page_Loadが呼ばれて、リダイレクトされて、NextPage.Page_Loadが呼ばれてるのがわかる。

Sample/aspnet/HttpResponse/Redirect/src/HttpResponse_ at master · bg1bgst333/Sample · GitHub

StateBag.Item[]

StateBagも、インデクサに対応してるので、キーを変えることで複数登録できる。

StateBag.Item[String] プロパティ (System.Web.UI) | Microsoft Docs

Default.aspxで、

Labelを2つに増やして、
Default.aspx.csは、

"data1"と"data2"で値を別々に登録。

何度押しても2つとも出てくる
何度押しても2つとも出てくる

何度押しても2つとも出てくる。

Sample/aspnet/StateBag/Item/src/StateBag_ at master · bg1bgst333/Sample · GitHub

StateBag

Control.ViewStateの実体はStateBag。

StateBag クラス (System.Web.UI) | Microsoft Docs

HttpSessionStateと同じように保存できる。
Default.aspxで、

LabelとButton。
Default.aspx.csで、

このようにすると、

まあ何度押しても出る。
まあ何度押しても出る。

まあ何度押しても出る。

Sample/aspnet/StateBag/StateBag/src/StateBag_ at master · bg1bgst333/Sample · GitHub

Control.ViewState

サーバーサイドでの保存がSessionなら、クライアントサイドでの保存はViewState。

Control.ViewState プロパティ (System.Web.UI) | Microsoft Docs

基本的には、ビューの状態をクライアント側で保持しておく為のものだけど。
Default.aspxで、

ViewStateの型を出してみる。

StateBagかな
StateBagかな

StateBagかな。

Sample/aspnet/Control/ViewState/src/Control_ at master · bg1bgst333/Sample · GitHub