1

いくつかのプロパティを含む小さなクラスがあります。

ここに例があります:

public class clsRepLogs

public string those;
public string these;

    public void setThoseandThese
    {
    //call a stored procedure
    //get results

    this.those = something;
    this.these   = somethingElse;
    }}

私のfirst.aspx.csから

私は集合関数を呼び出します:

clsRepLogs cLog - new clsRepLogs()
cLog.setThoseandThese()

これで、プロパティに値が割り当てられました。

別のaspx.csファイルでそれらを使用してフォームにデータを入力したいのですが、それらにアクセスする方法がわかりません...

私は試した

clsRepLogs cLog;

lblThese.text = cLog.these;

しかし、それは私にエラーを与えています:「割り当てられていないローカル変数'cLog'の使用

基本的に、以前からそのクラスインスタンスにすでに割り当てた値を使用するように指示するにはどうすればよいですか?

私はこの権利を説明していることを願っていますが、私は自分がしていることの道かもしれません。助けていただければ幸いです。

4

4 に答える 4

4

複数の ASPX ページからクラスの同じインスタンスにアクセスしたいようです。これを行うには複数の方法があります。ユーザーごとの解決策は、セッション状態を使用することです。

// page 1
var c = new clsRepLogs();
c.setThoseAndThese();
Session["mykey"] = c;

// page 2
var c = (clsRepLogs)Session["mykey"];

「mykey」には任意の文字列を指定できます。アクセスする前に Session に値が含まれているかどうかを確認することもできます。if( Session["mykey"] != null ){ ... }

次の点に注意してください。

  • セッションは永続的ではありません。Web ワーカー プロセスを再起動すると、すべてのインプロセス セッションがリセットされます。
  • 多くの大きなオブジェクトを Session に格納することは、通常は良い考えではありません。
  • データが機密情報である場合は、セッション固定攻撃に注意してください。
  • セッションはサーバー間で負荷分散できるため、このソリューションはスケーリングされます。

参考までに(代替アプローチ):

  • Cacheユーザーごとの分離を気にせず、データの有効期限を制御したい場合は、オブジェクトを使用できます。
  • Applicationオブジェクトを使用できます。有効期限に似てCacheいますが、有効期限を制御できません。
  • オブジェクトをデータベースに保存し、各ページにロードできます。これは、負荷の高いセッションを必要としない場合や、データをより永続的に保存したい場合 (複数のセッションで存続するショッピング カートなど) に役立ちます。
于 2013-01-28T20:34:37.537 に答える
0

必要なcLogインスタンスを初期化または設定する必要がありclsReportます。

于 2013-01-28T20:31:23.633 に答える
0

クラスをインスタンス化していない。そのはず

clsRepLogs cLog = new clsRepLogs();

または、私があなたのコードを誤解した場合、

clsReport cLog = new clsReport();

編集:

これらを保持する必要がある場合は、インスタンス化できないように静的クラスにする必要があります。

public static class clsReport
{
    public static string those;
    public static string these;

    public static void setThoseandThese
    {
        //call a stored procedure
        //get results

        this.those = something;
        this.these   = somethingElse;
    }
}

これの多くは、これが機能するためにどのように必要かによって異なります。さらに、私はWebformsアプリケーションのメモリ内のオブジェクト/クラスを永続化することについての専門家ではありません。これらの値を取得するためにクラスに再度アクセスしたい場合、それらがまだメモリ内にあるかどうかはわかりません。

于 2013-01-28T20:31:32.903 に答える
0

cLog クラスを初期化する必要があります。

clsRepLogs cLog = new clsReport();
lblThese.text = cLog.these;
于 2013-01-28T20:32:11.493 に答える