C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: インラインフレームを使ったaspxの作成


(過去ログ 60 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■34646 / inTopicNo.1)  インラインフレームを使ったaspxの作成
  
□投稿者/ vbマニア (1回)-(2009/04/04(Sat) 19:40:46)

分類:[ASP.NET (VB)] 

お世話になっております。

インラインフレームを使ったaspxを作っています。

画面を上部と下部に分け、下部にインラインフレームを使っています。
インラインフレームはtableタグの中に埋め込んでいます。

上部には顧客情報、下部には購入明細を表示しようと思っています。

page_loadで、isPostBackがFalseのとき顧客情報を取得するロジックを
書き込んでいます。

下部に表示するaspxのロジックは全然書き込んでいないのですが、
何故か実行すると上部に表示するaspxのpage_loadが2回走ってしまいます。

isPostBackは2回目のときも、Falseになっているので顧客情報を拾いに行き
ます。

フラグ制御とか色々試しましたが駄目でした。

インラインフレームを外すと1回だけ走りました。

インラインフレームを埋め込んでいても1回だけpage_loadが走るようには
出来ないのでしょうか?
引用返信 編集キー/
■34689 / inTopicNo.2)  Re[1]: インラインフレームを使ったaspxの作成
□投稿者/ biac@会社 orz (2回)-(2009/04/06(Mon) 14:49:50)
biac@会社 orz さんの Web サイト
iframe はセキュリティの面から嫌われてますよ。
http://bakera.jp/ref/html/element/iframe
http://itpro.nikkeibp.co.jp/article/NEWS/20080331/297487/

…って話はさておき。

> 何故か実行すると上部に表示するaspxのpage_loadが2回走ってしまいます。

ブラウザで受け取った html では、 iframe の src 属性はどうなってますか?

> インラインフレームを外すと1回だけ走りました。

…というお話からすると、 「上部に表示するaspx」と同じ url が、 iframe の src 属性にも指定されているような気がしてしまいます。


> 上部には顧客情報、下部には購入明細を表示しようと思っています。

それはすなわち、 2つの ASP.NET のページを連携させて動かそう、 という試みに思えるのですが?
どうやって実現させようとしていらっしゃいますか?
引用返信 編集キー/
■34732 / inTopicNo.3)  Re[2]: インラインフレームを使ったaspxの作成
□投稿者/ vbマニア (2回)-(2009/04/07(Tue) 21:07:47)
インラインフレームを使って次のようなことを実現しようと思っています。

info.aspx
tableタグの上部に、顧客情報を表示するtable
tableタグの下部に、インラインフレームで囲った購入明細を表示するtable

detail.aspx
インラインフレームで囲われた購入明細を表示する


> ブラウザで受け取った html では、 iframe の src 属性はどうなってますか?
src属性は予めdetail.aspxを指定しています。

> それはすなわち、 2つの ASP.NET のページを連携させて動かそう、 という試みに思えるのですが?
> どうやって実現させようとしていらっしゃいますか?
連携というより、起動時に「顧客情報」と「購入明細」を表示しようと思っています。

2回info.aspxのpage_loadが走るというのは、iframeのsrc属性に指定しているため
だとは思いますが。。。

教えていただきたいのは、2回走るのを回避するというよりiframeを使ったときの
イベントの場所なんですが。。。

親画面のinfo.aspxはinfo.aspx.vbのpage_loadなどに書いてよいのは判るのですが、
インラインフレームで囲った子画面のdetail.aspxのイベントは、何処に書けば
良いのでしょうか?

detail.aspx.vbのpage_loadにブレークを張っていても止まりませんでした。

初めは、info.aspxはinfo.aspx.vbに、detail.aspxはdetail.aspx.vbにロジックを
書き込めばよいと思っていました。
それで、info.aspxのpage_loadが2回走るのを制御したいと思っていました。

インラインフレームを使った開発の経験がないもので、非常に困っています。

よろしくお願いします。
引用返信 編集キー/
■34747 / inTopicNo.4)  Re[3]: インラインフレームを使ったaspxの作成
□投稿者/ biac (79回)-(2009/04/08(Wed) 11:08:02)
biac さんの Web サイト
info.aspx から出力された (ブラウザで受信した) HTML ソースを、 よく読んでください。
そこに info.aspx へのリンクが存在すれば、 info.aspx への新規リクエストが発生することに
なります。 (つまり、 合わせて 2回のリクエストが発生する。) 
これは ASP.NET の話ではなくて、 HTML をブラウザがどう解釈するかということです。


>>ブラウザで受け取った html では、 iframe の src 属性はどうなってますか?
> src属性は予めdetail.aspxを指定しています。

> 2回info.aspxのpage_loadが走るというのは、iframeのsrc属性に指定しているため
> だとは思いますが。。。

えーと、どちらが本当?


> > それはすなわち、 2つの ASP.NET のページを連携させて動かそう、 という試みに思えるの
> > ですが?
> > どうやって実現させようとしていらっしゃいますか?
> 連携というより、起動時に「顧客情報」と「購入明細」を表示しようと思っています

iframe に「購入明細」を表示するのでしょうけれど、 「購入明細」は「顧客情報」の例えば
顧客ID に紐付いた情報を取得してくるのではありませんか?
「顧客情報」と「購入明細」は、 まったく無関係?


私は、 ASP.NET 2.0 以降では frame を使う方法をやってなかったので、 この機会に試して
みました。
ちゃんと出来ますよ。 前に書いたように、frame/iframe を使うのはお勧めしませんけれど。

[親ページ - Default.aspx (抜粋)]

<body>
    <form id="form1" runat="server">
    <div>
      <h1>(顧客情報)</h1>
    </div>
    </form>
    <iframe src="iframe.aspx?uid=<%= GetUserId() %>" width="400" height="300"
     scrolling="auto" frameborder="1">
      <p>[iframe エリア]</p>
    </iframe>
</body>


[親ページのビハインドコード - Default.aspx.cs (抜粋)]

protected string GetUserId()
{
	return "0001";
}

protected void Page_Load(object sender, EventArgs e)
{
	Debug.WriteLine("親ページの Page_Load: " 
		+ DateTime.Now.ToString("mm:ss.fff"));
}


[iframe - iframe.aspx (抜粋)]

<body>
    <form id="form1" runat="server">
    <div>
    <h1>(購入明細)</h1>
    <p>ユーザーID = <%= UserId%></p>
    </div>
    </form>
</body>


[iframe のビハインドコード - iframe.aspx.cs (抜粋)]

protected string UserId { get; private set; }

protected void Page_Load(object sender, EventArgs e)
{
	Debug.WriteLine("iframe の Page_Load: " 
		+ DateTime.Now.ToString("mm:ss.fff"));
	this.UserId = this.Request.QueryString.Get("uid");
}


[実行時の出力 (抜粋)]
親ページの Page_Load: 38:11.044
iframe の Page_Load: 38:13.976
※ ちゃんと 1回ずつリクエストを受けています。


なお、 ASP.NET というのは、 ひとつの処理 (たとえば、 ユーザー入力 〜 確認 〜 検証・
処理実行 〜 結果表示) を、 一枚のページ (ひとつの aspx) で実装する、 というコンセプ
トで作られています。
( ※ ASP.NET MVC という仕掛けも出てきましたが、 とりあえずそれは置いておいて。 )
仕掛けのコンセプトから外れた使い方 (たとえば、 今回のような複数の aspx で一枚のペー
ジを構成する、など) をしようとすれば、 トリッキーな方法が必要になってきますし、 なに
より苦労することになります。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -