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

我调用 set 函数:

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 worker 进程将重置所有进程内会话。
  • 在 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 回答