在另一个类ASP.net中看不到值

时间:2015-12-14 13:33:38

标签: asp.net

我的项目有像

这样的结构
  • Project_ASP
    • 客户(文件夹)
    • Info.aspx
  • Login.aspx

的Login.aspx

//oracle_connection'
pasrsing data from Oracle
private string ResultPassport = string.Empty;

public string PassportResult
{
    get
    {
        return ResultPassport;
    }
    set
    {
        ResultPassport = value;
    }
}
Login obj = new Login();
obj.PassportResult = dr.GetString(0); 

Info.aspx

 protected void Page_Load(object sender, EventArgs e)
 {
     Login obj = new Login();
     TextBox3.Text = obj.PassportResult;      
 }

问题是,我无法在Info.aspx中看到结果

我的错误在哪里?

2 个答案:

答案 0 :(得分:3)

你为什么期望?

您正在创建一个新的Login对象:

Login obj = new Login();

然后您访问该新对象的属性:

obj.PassportResult

该财产是什么?:

private string ResultPassport = string.Empty;
public string PassportResult
{
    get
    {
        return ResultPassport;
    }
    set
    {
        ResultPassport = value;
    }
}

默认情况下,该值为string.Empty。所以你按预期得到了string.Empty

(旁注:该属性和支持变量的命名只是乞讨这些天的StackOverflowException。您可能想要选择更清晰的名称来区分属性与变量。)

您确实在上一个对象上设置了一个值:

Login obj = new Login();
obj.PassportResult = dr.GetString(0);

但那不是同一个对象。如果要从该对象获取值,则需要访问该对象。除非值为static可能不是您想要在Web应用程序中执行的操作),否则您需要维护对同一实例的引用,或者在某处保留并检索它。

这与ASP.NET无关。这就是C#(以及任何语言,真正)的工作原理。在一个对象上设置值不会影响其他对象。

有许多选项可以将该对象的状态从一个页面传递到另一个页面。你在这里做的最直接的可能就是使用会话状态。像这样:

Login obj = new Login();
obj.PassportResult = dr.GetString(0);
Session["PassportResult"] = obj;

然后在后面的页面中:

Login obj = (Login)Session["PassportResult"];

这有一些缺点,特别是在可扩展性方面。当然,在尝试检索和转换对象之前,您还需要进行一些错误检查以确保对象存在。但在大多数情况下,这应该可以完成工作。

这里的真正令人困惑的是你为什么要创建Page个对象的实例并为它们设置值。如果你退后一步并描述你实际上想要在这里完成的性质,那么可能有一种更简单的方法。例如,在URL或表单元素中传递值将非常简单,并且如果它只是一个字符串值,则可以更有效地扩展。 (虽然缺点是用户可以编辑它,所以这可能是一个问题。)

答案 1 :(得分:1)

事情不会那样奏效。首先,在Info.aspx中,创建另一个对象Login,这意味着它是Heap内存中的新对象,并且您的字段为空。要在页面之间传递信息,您可以使用:

  • 会话(糟糕的做法)
  • 缓存
  • 查询字符串
  • 从数据库中获取

或者您可以使用PreviousPage属性,如下所示:

if (PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox) PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
        Label1.Text = SourceTextBox.Text;
    }
}