在页面中有treeview,button两个控件,在PageLoad时加载好了treeview,代码:
protected void Page_Load(object sender,EventArgs e)
{
  if(!IsPostBack)
  {
    BuildTree(treeView); //建树
  }
}
当执行Button的Click事件后treeView.Nodes.Count为0了,每次提交后会刷新页面,但我不想在每次提交都要重建树,有什么办法可以防止这种情况啊?

解决方案 »

  1.   

    那你就添加一个静态变量key,用来判断treelist是否已经被建立了,如果key为0表示没建过,则 BuildTree(treeView),如果key为1,则做其他操作。
      

  2.   

    1 数据缓存,再读取。。
    2 ajax
    具体g一下
      

  3.   

    怎么会呢?你把ViewState禁用了?
      

  4.   

    ajaxPanel我没有试过.
    我试过OnClientClick事件,由于我是用的第三方Button,只支持JavaScript,所以还是用得不顺心,无法很好地写控制代码。
    刚试了一下ViewState,这个是保存本页面的对象,但只支持可序列化的对象.我用Session解决的,但感觉这个方式是不对劲.大家给我看看,如果对象多,我觉得用Session来保存不可取。
    实现目的的代码:
    protected void Page_Load(object sender,EventArgs e) 

      if(!IsPostBack) 
      { 
        BuildTree(treeView); //建树 
        Session["tree"] = treeView;
      } 
      else
      {
        if (Session["tree"] != null)
          treeView = Session["tree"];
      }
      

  5.   

    如果数据量大的话,用Session不好,容易丢失
      

  6.   

    用一個viewstate量.定義一個全局變量,當你點一次后附Flag=1,每次都判斷一下protected int Flag
        {
            get
            {
                if (ViewState["Flag"] != null)
                    return (int)ViewState["Flag"];
                else
                {
                    ViewState["Flag"] = 0;
                    return 0;
                }
            }
            set
            {
                ViewState["Flag"] = value;
            }
        }protected void Page_Load(object sender,EventArgs e) 

      if(!IsPostBack) 
      { 
        if(Flag == 0)
        {
           Flag = 1;
           BuildTree(treeView); //建树 
         }
      } 

      

  7.   

    把treeview的ViewState属性设为true即可,在aspx中设置就行
      

  8.   

    用updatepanel把控件围起来
    或者用一个变量控制
      

  9.   

    TreeView是必然每次重新生成的,否则你觉得内存中的TreeView从何而来?重新生成有两种做法:
    1.自动 - 你在第一次Page_Load时生成一次,然后存到ViewState里面,之后让TreeView自己通过ViewState重新生成。
    2.手动 - 每次Page_Load都手动重新生成。无论如何你必须选择一个,性能方面各有优劣,但我觉得都不会是大问题。
      

  10.   

    用Ajax把button提交事件做成无刷新。