我已经在像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 ?
}
}
答案 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 ?
}
}