- PR -

[ASP.NET]ページ間ポストバックについて

1
投稿者投稿内容
hIzzI
会議室デビュー日: 2005/06/02
投稿数: 10
お住まい・勤務地: 名古屋市
投稿日時: 2005-06-02 15:37
はじめまして。VWDβ2で開発を行っています、hIzzIと申します。
よろしくお願いします。

現在、ButtonコントロールのPostBackUrlを利用して、ページ間ポストバックを行い、以下のように、ポストバック後のページでコントロールの値を取得しています。

(Labelコントロール(Label1)の値を取得する場合)
Label l1 = (Label) Page.PreviousPage.FindControl["Label1"]);

この方法で問題なくコントロールの値を取得できるのですが、ポストバック前のページにマスターページを利用していると、ポストバック時に「オブジェクト参照がオブジェクト インスタンスに設定されていません。」のエラーが出てしまい取得することが出来ません。

そこで、
 foreach (Control a in (MasterPage)Page.PreviousPage.Controls)
 {
  Label1.Text += a.GetType().ToString() + ":" + a.ID + "<br />";
 }
として、PreviousPageのchild controlsを調べてみると
結果として
 ASP.MasterPage_master:
が返ってきます。
即ち、マスターページだけがPreviousPageに含まれており、実際のページ(ポストバック前のページ)のコントロール群が取得できない状態になっていると考えられます。

ここまではわかったのですがここから先がどうにもなりません。
何か良いお知恵がありましたら、よろしくお願いいたします。

因みに現在は、
 string st = Request.Params["ctl00$ContentPlaceHolder1$Label1"];
としてParamsCollectionを使って無理やり取得しています


[ メッセージ編集済み 編集者: hIzzI 編集日時 2005-06-02 15:42 ]

[ メッセージ編集済み 編集者: hIzzI 編集日時 2005-06-03 13:49 ]
hIzzI
会議室デビュー日: 2005/06/02
投稿数: 10
お住まい・勤務地: 名古屋市
投稿日時: 2005-06-03 13:48
自己解決しました

Label l1 = (Label) Page.PreviousPage.FindControl("ctl00$ContentPlaceHolder1$Label1");

で取得することが出来ました。
もう少し、短くしてほしい。。。
この記述の仕方が、ASP.NET2.0での王道になるのかな??

あと、PreviousPageのchild controlsとして、ctl00$ContentPlaceHolder1$Label1が含まれていないのはどうしてなんでしょう??

[ メッセージ編集済み 編集者: hIzzI 編集日時 2005-06-03 13:53 ]
1

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