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

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

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

Re[4]: ページリロード後のコンテキストアイテムの保持について


(過去ログ 36 を表示中)

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

■17861 / inTopicNo.1)  ページリロード後のコンテキストアイテムの保持について
  
□投稿者/ 純@WAS (1回)-(2008/05/02(Fri) 15:24:17)

分類:[ASP.NET (C#)] 

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

大変初歩的な質問で申し訳ありません。
現在作成しているaspxページで、リロード処理を行うと、コンテキストアイテムのところで、NullReferenceExceptionが発生します。
この現象を回避する方法をご教示頂けますでしょうか。

大まかではありますが、以下に流れを掲載します。

1:ログインページでログインを行い、ユーザ名を取得し、任意の変数にセットする
 displayName = "xxxxxx";←実際はソースで、ログインデータ格納ファイルから取得しています。

2:コンテキストアイテムに1で取得した名前を代入します。
 Context.Items["Name"] = displayName;

3:ページの遷移を行います。
 Context.Server.Transfer("aaa.aspx");

4:遷移した先で、ポストバックでない場合、2のユーザ名を取得します(この段階ではラベル等に正常に表示されます)
 if (!IsPostBack)
{
//名前のパラメータを引き受ける
string logInName = Context.Items["Name"].ToString()
    }

5:任意の処理を行い、protected void Page_Loadが走っても、ラベルには表示されています。

6:aaa.aspxのソースに以下を挿入しました。
 <meta http-equiv="refresh" content="20;url=aaa.aspx"/>

7: 20秒後にページがリロードされます。

8:リロード後のprotected void Page_Loadイベントの、
 string logInName = Context.Items["Name"].ToString();
 の部分にてNullReferenceException オブジェクト参照がインスタンスに設定されていません。
 と表示されます。

自動更新を入れた背景には、そのページで行われている処理を特定周期ごとに監視し、問題が発生していないか確認するためです。

以上、よろしくお願い致します。
引用返信 編集キー/
■18526 / inTopicNo.2)  Re[1]: ページリロード後のコンテキストアイテムの保持について
□投稿者/ 純@WAS (2回)-(2008/05/14(Wed) 17:23:18)
質問の背景は同じですが、少々手法を変えます。
上記の手法の場合、どのようにしてもコンテキストアイテムが取得できませんでした。

そこで、<meta http-equiv="refresh" content="20;url=aaa.aspx"/>の代わりに、
.aspx.csファイル内で自動更新を行おうとしたので、アドバイス頂ければと思います。

まず、ページロードに以下のプログラムを入れました。
Timer tm = new Timer();
tm.Elapsed += new ElapsedEventHandler(ReloadPage);
tm.AutoReset = true;
tm.Enabled = true;
tm.Interval = 10000;

これを利用した上で、一定時間ごとにボタンクリックを発生させるようにしたいです。
対象イベントはButtonReload_Clickです。

もしくは一定時間ごとに現在のページに対してポストバックを強制的に発生させる方法がございましたらお教え下さい。

先の投稿で、環境記述に不備があったので、以下に掲載致します。
・OS:Windows XP
・開発:Visual Studio2005
・言語:ASP.NET(C#)
・FW:.NetFramework2.0

引用返信 編集キー/
■18539 / inTopicNo.3)  Re[2]: ページリロード後のコンテキストアイテムの保持について
□投稿者/ はつね (684回)-(2008/05/14(Wed) 19:02:44)
はつね さんの Web サイト
No18526 (純@WAS さん) に返信
> まず、ページロードに以下のプログラムを入れました。
> Timer tm = new Timer();
> tm.Elapsed += new ElapsedEventHandler(ReloadPage);
> tm.AutoReset = true;
> tm.Enabled = true;
> tm.Interval = 10000;

無理。AJAX使うべし。

引用返信 編集キー/
■18597 / inTopicNo.4)  Re[3]: ページリロード後のコンテキストアイテムの保持について
□投稿者/ ま (32回)-(2008/05/15(Thu) 01:26:22)
ユーザーネーム云々に関して、
Session に保存できません?

サーバ側でタイマー起動に関して、
上に同じく無理。

あやっくすよりはもっと簡単に。

GETで受け取れるようにしたらどーです?



引用返信 編集キー/
■18681 / inTopicNo.5)  Re[4]: ページリロード後のコンテキストアイテムの保持について
□投稿者/ 純@WAS (3回)-(2008/05/15(Thu) 13:13:38)
No18597 (ま さん) に返信
> ユーザーネーム云々に関して、
> Session に保存できません?
>
> サーバ側でタイマー起動に関して、
> 上に同じく無理。
>
> あやっくすよりはもっと簡単に。
>
> GETで受け取れるようにしたらどーです?
>
>
>

はつね様、ま様

アドバイスありがとうございます。
AJAXに関する知識が乏しいので、こちらは勉強していきます。

取った手法としては、ま様からアドバイス頂いた、
Sessionに必要なデータを保存し、
各画面のページロードイベント内で
それらをGETすることで現状の仕様を満たしました。

しかし、これからの仕様変更に備えて、
タイマー起動に関してはAJAXが必須になってきますので、
プロトタイプ版という形でAJAXを使用したものを
作成してみようと思います。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -