|
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 で一枚のペー
ジを構成する、など) をしようとすれば、 トリッキーな方法が必要になってきますし、 なに
より苦労することになります。
|