- PR -

ページ間のデータ受け渡し

1
投稿者投稿内容
Trajanus
会議室デビュー日: 2003/02/20
投稿数: 3
投稿日時: 2003-02-20 14:15
日付取得用のDropDownListを配置したページ(WebForm1.aspx)から
1日のデータの動きを表示するページ(WebForm2.aspx)に日付データを送信して
WebForm2.aspx.vb内でグラフをjpeg画像として作成し、
WebForm1.aspxに表示しようと考えています。

このときWebForm1.aspxのDropDownListを表示した下に
WebForm2.aspxのグラフ画像を表示したいのですが、
WebForm1.aspxのPage_LoadにServer.Transferメソッドを入れると
DropDownListが消えて、グラフ画像のみの表示になってしまいます。

うまく表示するにはどうしたらよいのでしょうか?

---------------------------------------

--WebForm1.aspx--
<%@ Page Language="vb" Codebehind="WebForm1.aspx.vb" Inherits="WebForm.WebForm1"%>
<HTML>

<asp:DropDownList id="ddlYear"></asp:DropDownList>
<asp:DropDownList id="ddlMonth"></asp:DropDownList>
<asp:DropDownList id="ddlDay"></asp:DropDownList>

<img src="WebForm2.aspx">

</HTML>

--WebForm1.aspx.vb--
Public Class WebForm1
Inherits System.Web.UI.Page

Protected WithEvents ddlYear As System.Web.UI.WebControls.DropDownList
Protected WithEvents ddlMonth As System.Web.UI.WebControls.DropDownList
Protected WithEvents ddlDay As System.Web.UI.WebControls.DropDownList

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Server.Transfer("WebForm2.aspx")
End Sub

Public ReadOnly Property Day() As Date
Get
Return New Date(CInt(ddlYear.SelectedItem.Text()), _
CInt(ddlMonth.SelectedItem.Text()), _
CInt(ddlDay.SelectedItem.Text()))
End Get
End Property
End Class

--WebForm2.aspx--
<%@ Page Language="vb" Codebehind="WebForm2.aspx.vb" Inherits="WebForm.WebForm2"%>
<%@ Reference Page="WebForm1.aspx" %>


--WebForm2.aspx.vb--
Public Class WebForm2
Inherits System.Web.UI.Page

Public wf1 as WebForm1

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
wf1 = CType(Context.Handler, WebForm1)

Dim day as Date = wf1.Day

'グラフを描く
DrawGraph(day)
End Sub
End Class
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-02-20 15:39
Server.Transferは要りません。
<img src="WebForm2.aspx">
とすると、ブラウザはWebForm1.aspxとは別のリクエストをサーバーに送ります。

サーバーから渡されたHTMLソースを見てみると、画像の指定(<img src=...>のような)はありますが、画像のデータは入っていませんよね。
ブラウザは、サーバーから渡されたHTMLを読み、必要な画像をHTMLのやり取りとは別のやり取りで取得します。
WebForm2.aspxは画像を返すように作っておいて、WebForm1.aspxで
<img src="WebForm2.aspx">
と書けばOKです。


[ メッセージ編集済み 編集者: 一郎 編集日時 2003-02-20 15:45 ]
Trajanus
会議室デビュー日: 2003/02/20
投稿数: 3
投稿日時: 2003-02-20 16:25
お答えありがとうございます。

たぶん、Server.Transferは新しいページ(ここではWebForm2.aspx)を
実行してしまうので、画像のみが表示されてしまうと思うのですが、
そうなると、日付を引数としてWebForm1からWebForm2に渡す方法がよくわかっていません。
なにかよい方法に心当たりはないでしょうか?

つくりたいページは、Yahoo!にある株価グラフのように
テーブルの中にグラフが表示されて、
さらに過去のデータからも同じように1日のグラフが表示できるようにしたいのです。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-02-20 16:56
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3487&forum=7

ここに、ページ間のデータ渡しの話題が出ていますが、手軽なのは

○セッションオブジェクトとしておく方法(Page.Session参照)
○"xxx.aspx?txt=abc&pass=def"のように、リクエストURIにくっ付けて送る方法(Page.Request.QueryString参照)

辺りです。


ページ間のデータ渡しとは関係ない話ですが、株価のようなものであれば、誰が見ても同じグラフになるでしょうから、Page.Cacheをうまく使えば何度も同じ作業(同じ画像を作る)をしなくても済むようになるかもしれません。
上のリンクのshuさんの書き込みにありますが、Cacheはどのユーザーでも同じオブジェクトにアクセスできるようです。「株価のようなもの」は一番の使い所だと思います。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-02-20 17:12
渡すデータが日付とかだったら、
<img src="WebForm2.aspx?datedata=xxxx/xx/xx">
といった形で渡してあげれば、WebForm2.aspx側では
Request.QueryString("datedata")といった感じで
日付をとりだせると思います。
Trajanus
会議室デビュー日: 2003/02/20
投稿数: 3
投稿日時: 2003-02-20 18:35
イメージタグにid="idname"を追加して

WebForm1.aspxに
Dim image As HtmlImage = FindControl("idname")
image.Src="WebForm2.aspx?datedata=xxxx/xx/xx"
xxxx/xx/xxはDropDownListから作るようにしたら、うまくいきました。

一郎さん、shuさんありがとうございました。
大変勉強になりました。
1

スキルアップ/キャリアアップ(JOB@IT)