回发后保留对象的值

本文关键字:对象 保留 | 更新日期: 2023-09-27 18:02:35

以下代码对Config.xml进行反序列化,并在网格中加载对象值。问题是,当我选择一行时,它会触发GridCustomers_RowSelected,但配置对象为空。我理解这是因为每次我选择一行时,它都会返回并忘记配置对象中的值。

这个问题的一个解决方案可能是我将配置对象存储在会话或视图状态中。或者我反序列化IsPostBack块外的对象。我想知道是否有其他更好的解决方案来保留配置对象中的值。

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();
    }
}