C# 回发后保留对象的值
下面的代码反序列化Config.xml并将对象值加载到网格中。问题是,当我选择一行时,它会激发C# 回发后保留对象的值,c#,asp.net,postback,C#,Asp.net,Postback,下面的代码反序列化Config.xml并将对象值加载到网格中。问题是,当我选择一行时,它会激发GridCustomers\u RowSelected,但config对象为null。我理解这是因为每次我选择一行时,它都会发回并忘记config对象中的值 private Config config = null; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { c
GridCustomers\u RowSelected
,但config对象为null。我理解这是因为每次我选择一行时,它都会发回并忘记config对象中的值
private Config config = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
config = new Config();
string file = @"C:\Config.xml";
XmlData xmlData = new XmlData(file);
config = xmlData.Deserialize();
StoreCustomers.DataSource = config.Customers;
StoreCustomers.DataBind();
}
}
protected void GridCustomers_RowSelected(object sender, DirectEventArgs e)
{
string customerID = e.ExtraParams["ID"].ToString();
string customerName = e.ExtraParams["Name"].ToString();
Customer customer = new Customer();
customer = config.Customers.Where( a=> a.ID == customerID).SingleOrDefault();
StoreCompanies.DataSource = customer.Companies;
StoreCompanies.DataBind();
}
解决这个问题的一个方法是将配置对象存储在会话或viewstate中。或者在IsPostBack
块外反序列化对象。我想知道是否有其他更好的解决方案来保留config对象中的值
private Config config = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
config = new Config();
string file = @"C:\Config.xml";
XmlData xmlData = new XmlData(file);
config = xmlData.Deserialize();
StoreCustomers.DataSource = config.Customers;
StoreCustomers.DataBind();
}
}
protected void GridCustomers_RowSelected(object sender, DirectEventArgs e)
{
string customerID = e.ExtraParams["ID"].ToString();
string customerName = e.ExtraParams["Name"].ToString();
Customer customer = new Customer();
customer = config.Customers.Where( a=> a.ID == customerID).SingleOrDefault();
StoreCompanies.DataSource = customer.Companies;
StoreCompanies.DataBind();
}
或者在IsPostBack外部反序列化对象
这样做,反序列化并在IsPostBack之外创建它
protected void Page_Load(object sender, EventArgs e)
{
config = new Config();
string file = @"C:\Config.xml";
XmlData xmlData = new XmlData(file);
config = xmlData.Deserialize();
if (!Page.IsPostBack)
{
StoreCustomers.DataSource = config.Customers;
StoreCustomers.DataBind();
}
}