###前提・実現したいこと
お世話になります。
ASP.NETで作成された業務システムにおいて、1画面上に複数のユーザコントロールが埋め込まれたページの改修を行っています。
改修内容は、「それぞれのユーザコントロールごとにiframeでラップし、iframeの中にaspxファイルをロードする。そこにユーザコントロールを埋め込むようにする」というものです(1)。
ユーザコントロール自身には初期化用の関数が定義されており、ループ処理でユーザコントロールを埋め込むタイミングにその関数を実行しているのですが、引数として独自クラスのインスタンスを渡しています(2)。
(1)を実現する場合、ユーザコントロールを埋め込む処理を、iframe内の別のaspxファイルに記述する必要が出てくるため、今度は(2)を実現することが出来なくなります。
(1)を実現しつつ、ユーザコントロールの初期化処理にインスタンスを引数として渡すためには、どうすればよいでしょうか。
###親画面のソースコード
VB
1For i = 0 To 10 2 Dim c As New UserClass() 3 4 '…中略 (UserClassの調整など)…' 5 6 Dim pan As New Panel() 7 Dim iframe As New Literal() 8 9 'iframe内にユーザコントロールを埋め込むよう改修する 10 iframe.Text = "<iframe src='hoge.aspx?controlPath=fuga" & i.ToString() & ".ascx'></iframe>" 11 pan.Controls.Add(iframe) 12 13 'pan.Controls.Add(userControl1) '改修前はここで直接ユーザコントロールを埋め込んでいた 14 'userControl1.init(c) '初期化処理もここで実行 15 16 FindControl("親画面のdiv要素").Controls.Add(pan) 17Next
###iframe内のソースコード(hoge.aspx.vb)
VB
1Protected Overloads Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 2 Dim controlPath As String = Request.QueryString("controlPath") 3 4 Using userControl1 As Object = CType(LoadControl(controlPath), Object) 5 userControl1.init(c) 'cが渡せない 6 End Using 7End Sub 8
###制限
CookieやSessionの利用は不可
###試したこと
XMLSerializerなどを利用してシリアライズし、QueryStringとしてクラスインスタンスも渡す方法を一度試したところ、クラスインスタンスのプロパティでエラーが発生し、シリアライズがそもそも上手くできませんでした。また、ブラウザのクエリパラメータ文字数制限にひっかかることや、処理の複雑化が発生することを考慮してひとまず断念しました。
###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft .NET Framework 3.5

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/02/09 01:13