无法在另一种方法中访问变量

时间:2014-03-20 02:45:24

标签: c# asp.net scope

我已经在像here这样的stackoverflow上尝试了其他解决方案,但我仍然无法让它工作。我只是希望能够在这两种方法中访问客户对象,但在最后一种方法中它始终为null。我在这里错过了什么?

public class Administration_CustomerDisplay : Page
{
    private Customer customer;

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        customer = new Customer();
        customer.Name = "test";
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Console.WriteLine(customer);   //Why is this null ?
    }
}

4 个答案:

答案 0 :(得分:4)

客户对象仅在下拉列表更改时创建...然后在更改下拉列表并且客户对象消失后,您的页面将呈现。

如果您希望在按钮单击后可以使用该对象,则需要在会话中保留该对象。

答案 1 :(得分:2)

与Windows应用程序不同,您的Page对象并不是一直只在内存中。每次用户发出请求时,都会在服务器上创建该对象。每个事件将对应一个不同的请求,因此对应一个不同的Page对象。第二个对象对第一个对象及其customer字段的值一无所知。第二个对象永远不会设置其customer字段,因此它始终为空。

如果要在请求之间保留值,则必须使用会话变量。

答案 2 :(得分:2)

您应该将实例保存在Session中,如下所示。

public partial class Administration_CustomerDisplay : System.Web.UI.Page
{
    Customer customer;

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        customer = new Customer();
        customer.Name = "test";
        HttpContext.Current.Session["customer"] = customer;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        customer = HttpContext.Current.Session["customer"];
        Console.WriteLine(customer.Name);   //Why is this null ?
    }
}

答案 3 :(得分:0)

显然,客户必须是全局变量。

public class Administration_CustomerDisplay : Page
{
    private Customer customer = new Customer();

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
           customer.Name = "test";
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Console.WriteLine(customer);   //Why is this null ?
     }
}