You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:15:05