|
分類:[ASP.NET (VB)]
マスターページ
ASP.NET 2.0 [VB]
+----------------------------------------+
| Master1 の静的コンテンツ |
+-------+--------------------------------+
|※1 |※2 |
|Master2|Content1 or Content2 |
|の静的 | |
|コンテ | |
|ンツ | |
| | |
+-------+--------------------------------+
※1 Master1 のプレースホルダー
※2 Master2 のプレースホルダー
Master1: 3分割の上部分
<asp:Label id="LabelMessage" />
<asp:LinkButton id="LinkButton1" />
Master2: 3分割の左部分
TreeViewかListView
Content1: 初期表示用
ポストバックが走るイベントは一切無し
Content2: Master1 の LinkButton 押下の時の画面遷移用
DetailView とか GridView とか一杯
初期表示
Master1 -> Master2 -> Content1
で、Master1#LinkButton1 をクリックしたときのイベント内で
context.items.item("MSG") = "メッセージです"
server.transfer("Content2.aspx")
としています。
で、Content2 の Master1 の PageLoad イベント内で
dim o as object = context.items.item("MSG")
if o isnot nothing then
LabelMessage.Text = CType(o, string)
end if
としていますが、当の "MSG" が取れません。
試してないので適当かもしれませんが、Content1 内のイベントで
context.items.item("MSG") = "コンテンツ1のメッセージ"
server.transfer("Content2.aspx")
ってやったときは、Master1 で取れる予感がしていますが、Content2
に画面遷移したあとはずーっと Content2 -> Content3 ->4,,,x と互い
に呼び合う形になりますのでここでの変数の取り方は今のところ問題
ではありません。
java/struts の場合だと、HttpServlet 派生クラスの static メンバにセットしてあげれば
別画面でも取れたと思うのですが、 .NET の場合、ページアクセス毎に毎回 IIS によって
そのページがアタッチされる気がするので、Master1.master の shared メンバに設定して
も意味無いと考えています。仮に出来たとしても、複数アクセスが起きたら 更新可能な
static メンバでは値の保証が出来ないのでもとよりこのようなことをするつもりはありません。
session("MSG") で出来ることはわかっています。
一発目だけなんで sessionでもいいか、という気がするのですが、なるべくsession は使いたく
ないと考えています。
他にもっと簡単な手法で実現できますよ、ってのがあれば教えてください。
宜しくお願いします。
以上
|