我自定义了一个TreeNode和Treeview.并在TreeNode里面增加了若干属性。public class CompanyNode : System.Web.UI.WebControls.TreeNode    {
        private string _nodeID;
        private string _parentID;
        private int _levelID;
        private string _nodeName;        public CompanyNode()
            : base()
        {
        }        public CompanyNode(string NodeText, string NodeValue, string ImageUrl)
            : base(NodeText, NodeValue, ImageUrl)
        {        }        public string NodeID
        {
            get { return this._nodeID; }
            set { this._nodeID = value; }
        }
        
        public string ParentID
        {
            get { return this._parentID; }
            set { this._parentID = value; }
        }        public int LevelID
        {
            get { return this._levelID; }
            set { this._levelID = value; }
        }        public string NodeName
        {
            get { return this._nodeName; }
            set { this._nodeName = value; }
        }
    }    public class CompanyTreeView : TreeView
    {
        protected override TreeNode CreateNode()
        {
            return new CompanyNode();
        }    } 我用一下代码在装载Treeview:AceWorld.Control.CompanyNode companyRoot = new AceWorld.Control.CompanyNode("CompanyName,"CompanyID, "../../images/star.gif");companyRoot.NodeName = "TestNode";
companyRoot.NodeID= "TestNodeID";
companyRoot.ParentID= "TestParentID";
companyRoot.LevelID= 1;treeView.Nodes.Add(companyRoot); 
然后我想在Click树结点的时候,从节点里面取出装载时添加的属性"NodeName" "NodeID", "ParentID","LevelID"。protected void CompanyTreeView_Setting_SelectedNodeChanged(object sender, EventArgs e)
{
        CompanyNode tmpNode = (CompanyNode)(this.CompanyTreeView_Setting.SelectedNode);}但是 (CompanyNode)(this.CompanyTreeView_Setting.SelectedNode) 经过转换后返回的"tmpNode" ,所有属性比如 "NodeName" "NodeID", "ParentID","LevelID" 全都为Null.大家知道怎么办吗?(以上思路在Winform当中顺利通过,但是在asp.net中总是失败)

解决方案 »

  1.   

    跟Winform中不同,如果你希望控件的某个属性能在回传后保持,那么你需要把它保存到ViewState里
      

  2.   

    那么,控件应该按下面给出的例子这样写: private string ViewStateMyText
            {
                get
                {
                    object local = base.ViewState["MyText"];
                    return (local != null) ? (String)local : "";
                }
            }        public string MyText
            {
                get
                {
                    return ViewStateMyText;
                }            set
                {
                    base.ViewState["MyText"] = value;
                }
            }
      

  3.   

    我用一下代码在装载Treeview:AceWorld.Control.CompanyNode companyRoot = new AceWorld.Control.CompanyNode("CompanyName,"CompanyID, "../../images/star.gif");companyRoot.NodeName = "TestNode";
    companyRoot.NodeID= "TestNodeID";
    companyRoot.ParentID= "TestParentID";
    companyRoot.LevelID= 1;这些封装要写到public class CompanyNode : System.Web.UI.WebControls.TreeNode类里面