在一个html里放了一个frameset,其中左网页是left.aspx,内容是一个treeview导航栏,作用是点击一个节点后,将节点的值传递到右网页的right.aspx中去。右网页right.aspx的作用是在获取左网页传递来的值后,读取相应的xml文档。right.aspx的相关部分是这样写的:
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                if (Session["username"] != null)
                {
                    username = Session["username"].ToString();
                }
            }
}
现在的问题是我只能在刚打开页面时,执行到代码块里的内容,但这时应为没有点击left.aspx中的treeview节点,所以username必然是空值。我在点击left.aspx中的treeview节点后
        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            Session["username"] = TreeView1.SelectedNode .Value ;
        }
程序确实执行了,session的username确实得到了TreeView1.SelectedNode .Value,但right.aspx由于已经加载过了,所以不再执行代码块里获取username的代码,导致一直无法读取相应的xml文件,应该怎么办好呢?

解决方案 »

  1.   

    你点击TreeView1时。。除了存session之外。。你还是跳转一下right.aspx
      

  2.   

    如果在treeview绑定时对url做处理呢?用url传值可以吗?
      

  3.   

     if (IsPostBack)
    {}把外层的这个去掉
      

  4.   

    应该如何跳转呢?去掉if (IsPostBack)
    {}
    是无效的哦,因为这个代码段在page_load里,而page_load不再执行了
      

  5.   

    楼主基本机制不懂啊事件执行都要先经过page_load的
      

  6.   

    5楼不要那么早下结论,如果right.aspx有其他控件的话,当然需要经过page_load步骤,但我这个只是一个读取xml的javascript代码,之所以命名为right.aspx,是因为要接收来自left.aspx的session的username。我以前编过的网页里,有很多其他控件,每次都要经过page_load从而获取到session的值,但这次,不管怎么弄,page_load内的代码根本就不执行,因为right.aspx只load一次,再也没有load第二次了
      

  7.   

    放在ispostback却是只执行一次啊。除非重新加载改页面啊