ASP.NETでページ間のフィールドを取得する

http://cappuccino.jp/keisuken/logbook/20081120.html


ASP.NETでは@Referenceディレクティブを指定することによって、
ページ遷移時に遷移元のページ(Page)を取得することができる。
A/Bページあって、A→B、B→Aへ循環させるページ遷移をさせたいことは結構あるはずだ。
しかしAページとBページ両方とも@Referenceディレクティブを設定すると、
循環ファイル参照エラーになって、実行することができない。

かなり邪道な気はするが、@Referenceディレクティブを設定せずに、受け取り側でPageオブジェクトにリフレクションを使って、無理やり前ページのプロパティを読み込むというのも可能だった。この方法なら、共通の親クラスとか作らなくてもよい。


' 送り側
Class Page1
Inherits System.Web.UI.Page

Protected _param1 As String

Public ReadOnly Property Param1() As String
Get
Return _param1
End Get
End Property

...

' 次画面呼び出し
_param1 = messageBox.Text
Server.Transfer("Page2.aspx")

...

End Class


' 受け取り側
Class Page2
Inherits System.Web.UI.Page

' リフレクションを使ってプロパティ読み込み
Protected Function GetPropValue(ByRef obj As Object, ByVal strPropName As String) As Object
Dim pi As System.Reflection.PropertyInfo = obj.GetType().GetProperty(strPropName)
Return pi.GetValue(obj, Nothing)
End Function

...

' パラメータ受け取り
Dim prevPage As Page = HttpContext.Current.Handler
Dim param1 As String = CType(GetPropValue(prevPage, "Param1"), String)

receiptMessage.Text = param1

...

End Class