一旦在c#中设置了它的属性

时间:2013-01-28 20:30:01

标签: c# asp.net

我有一个小班,里面只有几个属性。

这是一个例子:

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 个答案:

答案 0 :(得分:4)

听起来您想从多个ASPX页面访问该类的同一实例。有多种方法可以做到这一点;每用户解决方案是使用会话状态。

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

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

“mykey”可以是任何字符串。您可能还想在访问Session之前检查Session是否包含该值,例如if( Session["mykey"] != null ){ ... }

请记住:

  • 会话不耐用;重新启动Web工作进程将重置所有进程内会话。
  • 在Session中存储许多大型对象通常不是一个好主意。
  • 如果数据是保密的,请注意Session fixation attacks
  • 会话可以跨服务器进行负载平衡,因此该解决方案可以扩展。

供参考(替代方法):

  • 当您不关心每个用户的隔离并希望控制数据过期时,您可以使用Cache对象。
  • 您可以使用Application对象;类似于Cache但无法控制过期。
  • 您可以将对象存储在数据库中并将其加载到每个页面上。当您不想要繁重的会话和/或希望更永久地保存数据时(例如在多个会话中持续存在的购物车),这非常有用。

答案 1 :(得分:0)

您需要初始化或设置cLog到您想要的clsReport实例。

答案 2 :(得分: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应用程序中使内存中的对象/类永久化的专家。如果您想重新访问该类以获取这些值,我不确定它们是否仍然存在于内存中。

答案 3 :(得分:0)

您需要初始化cLog类:

clsRepLogs cLog = new clsReport();
lblThese.text = cLog.these;