TreeView:NavigateUrl和Session["data"]势不两立
下面的代码,如果注释掉红色的行,兰色的行就有效
如果不注释掉红色的行,兰色的就失效(不显示Session["data"])
红色作用,给树的每个结果初始化上NavigateUrl,以便让我一点结果就到对应网页
兰色作用,上面的保存所点结点的Valuepath于Session["data"],下面的显示出Session["data"]值,我的Session["data"]用于在本页和其它页引用,为简化,帖出的代码是在本页引用
红兰的两功能我想同时要,但是他们却不想共存
问:如何让他们共存?改动越少越好。
public partial class a_a : System.Web.UI.Page
{
     protected void Page_Load(object sender, EventArgs e)
     {
         GetAllNodeText(TreeView1.Nodes);   
     }
     protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
     {
         Session["data"] = TreeView1.SelectedNode.ValuePath.ToString();
     }
     void GetAllNodeText(TreeNodeCollection tnc)
     {
         foreach (TreeNode node in tnc)
         {
             if (node.ChildNodes.Count != 0)
                 GetAllNodeText(node.ChildNodes);
             Response.Write(node.Text + " ");
             node.NavigateUrl = "TopicList.aspx?Department=" + node.ValuePath;
         }
     }
     protected void Button1_Click1(object sender, EventArgs e)
     {
         String data = Session["data"] as String;
         Response.Write(data);
     }
}
------解决方案--------------------protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
       GetAllNodeText(TreeView1.Nodes); 
   }
}
------解决方案--------------------仅在用户单击节点时的回发中才激发 SelectedNodeChanged 事件。
你使用NavigateUrl,点击就转到NavigateUrl的地址了,是不会触发 SelectedNodeChanged 事件d  
你传参数,添加到NavigateUrl后面就可以了
参见
http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.treenode.navigateurl.aspx
里面的备注部分
------解决方案--------------------你可以去掉NavigateUrl
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
 {
 Session["data"] = TreeView1.SelectedNode.ValuePath;
 Response.Redirect("~/TopicList.aspx?Department=" + Server.UrlEncode( TreeView1.SelectedNode.ValuePath));
 }
------解决方案--------------------那你可以改成
C# code
Page.ClientScript.RegisterStartupScript(Page.GetType(),"js","window.top.frames['Contentframe'].location.href='" + Page.ResolveUrl("~/") + "TopicList.aspx?Department=" + Server.UrlEncode( TreeView1.SelectedNode.ValuePath)+ "'",true);