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.PageProtected _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