質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

13634閲覧

【ASP.NET】iframeに読み込んだaspxファイルのPage_Loadイベントに親画面で生成したクラスインスタンスを渡したい

退会済みユーザー

退会済みユーザー

総合スコア0

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/02/08 08:55

###前提・実現したいこと
お世話になります。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

A.aspx ページの Page_Load で初期化した UserClass クラスのインスタンスを、B.aspx に Page_Load 時点で渡すということがしたいのに、Session、Cookie は使用禁止で、QueryString はそもそもシリアル化ができないのでダメということですと、残る手段はアプリケーション状態とかキャッシュぐらいしかなさそうですが、それも使えないのでしょうね。

とすると、今のやり方を根本的に変えない限り、手の打ちようがないと思うのですが。

UserClass というのが具体的になんだかわからないので可能かどうか不明ですが、UserClass のインスタンスを渡すというやり方を変えて、UserClass の初期化に必要な情報を QueryString で渡せる形にして A.aspx から B.aspx に渡し、UserClass のインスタンスの生成と初期化は B.aspx で行う他手はなさそうな気がします。

投稿2017/02/09 00:49

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/09 01:13

> SurferOnWww 様 回答いただき、ありがとうございます。 > 残る手段はアプリケーション状態とかキャッシュぐらいしかなさそうですが、 > それも使えないのでしょうね。 仰るとおりで、使用禁止です。 > UserClass のインスタンスを渡すというやり方を変えて、 > UserClass の初期化に必要な情報を QueryString で渡せる形にして こちらの件ですが、UserClassのメンバには別クラスのコレクションが複数ぶら下がっていたりします。初期化するにはあまりにもパラメータが多く、ユーザコントロールを埋め込む以前・以後のロジックにおいても、依存性が強すぎる状態です(ByRefで更新されたUserClassを親画面に返す処理など頻繁にあります) > 今のやり方を根本的に変えない限り、手の打ちようがないと思うのですが。 やはりプログラムの根底から改変しなければ難しいですよね…。 そこの認識が誤っていないか、確認の意味も含め質問いたしました。 これ以上の回答も必要ないと思いますので、 ベストアンサーに選ばせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問