是否需用TreeView1_SelectedNodeChanged ?TreeView1.ResolveUrl("showSelect.aspx?nodname=" + TreeView1.SelectedNode.Text);
Response.Redirect("showSelect.aspx?nodname=" + TreeView1.SelectedNode.Text);好像都不行。我想要的是,不重新打开页面。

解决方案 »

  1.   

    解决方案:
    不用传 直接拿就行 在你的这个事件中直接取
      TreeView t = Page.Master.FindControl("TreeView1") as TreeView;
                tt = t.SelectedNode.Text;
    试试看
      

  2.   

    有两个问题:1. 不要在一个组件里边轻易搞什么“传入宿主页面”。设计应该用接口概念,即在你确定使用TreeView之前就定好功能性接口,而这个接口具体是用TreeView还是别的什么(比如TextBox)来实现,应该是接口之后的事。有一点经验你就知道,这才是可靠的软件开发思路。2. 除非是用户选择节点之后第一个回发操作时,其它时候TreeView的SelectNode并不跟具体的某个TreeNode的Selected匹配,所以如果真的需要到界面控件上去判断哪一个节点被选中,应该遍历TreeView下所有节点,而不是用它的无用的SelectedNode树形。
    具体来说就是两点:1. 为你的master page设计一个独立自主的属性,例如叫做 SelectedName 属性;2. 这个属性不依赖于内部 TreeView 实现(即使换作用TextBox、Menu、GridView来实现也是一样)。在你的master page中类似于这样设计:    public string SelectedName
        {
            get
            {
                object x=ViewState["selid"];
                return x==null?string.Empty:(string)x;
            }
            set
            {
                if (SelectedName!= value)
                {
                    ViewState["selid"] = value;
                    //todo: 遍历TreeView的节点将Text恰好等于value的选中
                }
            }
        }    protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            this.SelectedName = this.TreeView1.SelectedNode.Value;
        }
      

  3.   

    实际上,我注释掉的那一行,有两种设计方法。一种是 INotifyProperty 的方式,这样当 SelectedName属性被改编的时候,抛出事件来通知所有客户程序,于是这个属性的改变就自动通知TreeView来改变被选中的TreeNode了。另一种就是我在注释中写的那样,直接访问TreeView,这省了3、4行语句,但是失去了比较通用的事件通知的能力。