ページロード時に初期化されない変数を定義するには? – プログラミング – Home

ページロード時に初期化されない変数を定...
 
通知
すべてクリア

ページロード時に初期化されない変数を定義するには?


りんご
 りんご
(@りんご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

開発環境:Windows2000Professional VisualStudio.net C#
こんにちは。いつもお世話になっています。

Webアプリケーションを作成しています。
Webフォームのコマンドボタンをクリックしたりすると
毎回、Page_Loadメソッドが実行され、publicで定義している
変数が初期化されてしまいます。
2回目以降のロード時には初回ロード時の情報を保持しておくには
どうすればよいのでしょうか?

例)
public class WebForm1 : System.Web.UI.Page
{
// WebServiceを宣言
protected localhost.Service1 service;
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// 初回ロード時の場合
if( IsPostBack == false)
{
// サービスを作成する
service = new localhost.Service1();
// サービスをコール
service.test() ;
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
 // サービスをコール
service.test1() ;  ←このときはserviceはnullになっている
}

よろしくお願いします。


引用解決済
トピックタグ
aki
 aki
(@aki)
ゲスト
結合: 23年前
投稿: 19
 

ViewStateに入れておいてはどうでしょう?

ただ、[Serializable]なクラスしか入れられないので、
localhost.Service1というクラスで使用できるかどうかは
わかりません。


返信引用
りんご
 りんご
(@りんご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

akiさんどうもありがとうございました。
localhost.Service1はViewStateに入れることはできませんでした
が、その他に保持しておきたい変数(int)は入れることができました。

現在、localhost.Service1のコンストラクタで
DBに接続しているのですが、
page_loadごとにlocalhost.Service1クラスを初期化している状態です。
こういう作り方は普通なのでしょうか?
何か良い方法があれば教えてください。
よろしくお願いします。


返信引用
ZEBRA
 ZEBRA
(@ZEBRA)
ゲスト
結合: 22年前
投稿: 10
 

初めまして。ZEBRAと申します。
基本的に、WebFormのインスタンスは、POSTBACK(初回ではなく、2回目以降のロード)
する度に、再作成されます。
、なので、当然、そのWebFormが保持しているプロパティ等の情報は、忘れ(初期化さ
れ)てしまいます。
ところが、毎回、初期化されては不都合が多いので、この情報をどこかに記憶し、
POSTBACK時に復元できるようにする必要が出てきます。

これを実現する実現として、以下の3つの方法があります。
①ViewStateを使う。
 クライアントが、隠しフィールドを利用して覚えておく変数。
 但し、クライアントからHTTP要求を出す度に、ViewStateの情報
 も送信することになるので、ネットワークの負荷が大きいというデメリットがある。
 記憶できるのは、シリアライズ可能なオブジェクトのみになる。
②Session変数を使う。
 Webサーバがセッション毎に管理している変数。
 但し、Webサーバが記憶することになるので、多用するとサーバリソースに
 負担がかかるデメリットあり。
 ViewState同様、記憶できるのは、シリアライズ可能なオブジェクトのみになる。
③Cacheを使う。
 利用したことがないのでわかりません…。ヘルプで確認してください。

>現在、localhost.Service1のコンストラクタで
>DBに接続しているのですが、
>page_loadごとにlocalhost.Service1クラスを初期化している状態です。
>こういう作り方は普通なのでしょうか?
基本的に、POSTBACKする度に作り直すというのがスタンダードな作りのようですね。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>(3)Cacheを使う。

Cookie じゃなくて?


返信引用
ZEBRA
 ZEBRA
(@ZEBRA)
ゲスト
結合: 22年前
投稿: 10
 

Cookieとは別に、キャッシュというものが存在するようです。
ASP.NETでは、
System.Web.Caching.Cacheクラスが提供しているようです。
ヘルプには、以下のように説明されています。
「ASP.NET には、大量のサーバー リソースをメモリ内に作成するために必要とするオブ
ジェクトを格納できるようにするための強力で使いやすいキャッシュ機構が用意されて
います。」

まだ使ったことがないので、SessionやViewStateとの違いをよくわかっていませんが、
機会があれば、深く調べてみようと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました