Web Forms项目TreeView的OnSelectedNodeChange事件不显示勾选节点问题
问题根因
页面每次触发回发(包括点击按钮提交)时,都会执行Page_Load中的TreeView绑定逻辑,用户勾选的节点状态会被全新生成的节点覆盖,最终导致CheckedNodes集合为空,没有可输出的内容。
修复方案
1. 调整Page_Load绑定逻辑
仅在页面首次加载时绑定TreeView数据,回发时复用视图状态中保存的节点信息,修改后代码如下:
protected void Page_Load(object sender, EventArgs e) { //These variables and methods create a hierarchy of the folder structure. if (!IsPostBack) { var latestDirectory = DirectoryList().First().FullName.ToString(); this.directoryFiles = DirSearch(latestDirectory); this.directoryArray = dirArray; this.directoryString.Text = latestDirectory; ListDirectory(TreeView1, latestDirectory); } }
2. 可选优化:适配前端换行显示
原代码中使用的\n不会被浏览器识别为换行符,替换为HTML的<br/>标签可保证勾选内容分行展示:
protected void Select_Change(object sender, EventArgs e) { string message = "selected nodes <br/>"; foreach(TreeNode item in TreeView1.CheckedNodes) { message += item.Text + "<br/>"; } Message.Text = message; }
额外检查项
- 确认TreeView控件的
EnableViewState属性没有手动设置为false,该属性默认开启,是保留节点勾选状态的基础 - 确认绑定节点的
ListDirectory方法不会在非首次加载时被其他逻辑调用,避免节点被意外重置
内容的提问来源于stack exchange,提问作者jmath412
相关产品推荐
相关产品推荐

