JS获取TreeView选中节点Text与Value的方法及跨页传值
本文介绍在ASP.NET中如何通过JavaScript获取TreeView控件选中的节点文本与值,并将结果传回父页面。核心技巧包括利用NavigateUrlField暂存Value值,通过event.srcElement定位节点,以及操作window.opener实现跨窗口数据回填与关闭。
TreeView节点值获取与跨窗口传值实现
在实际开发场景中,常需在一个弹出窗口内展示TreeView控件,该控件的数据源绑定方式可参考相关随笔。当前目标是实现点击节点后,将选中的Text和Value值返回至父页面,并自动关闭当前弹出窗口。
首先,需在后台代码中为TreeView控件注册onclick属性,以启用客户端事件处理。
具体代码实现如下:
if (!IsPostBack)
{
TreeView1.Attributes.Add("onclick", "ReturnValue()");//ReturnValue为javascript函数
BindTreeView();
} JavaScript获取选中节点的核心逻辑
接下来,重点在于如何通过JavaScript脚本准确获取当前被选中的节点信息。相关脚本代码如下:
具体脚本如下:
function ReturnValue() {
var objNode = event.srcElement;
var unitid = event.srcElement.href;
if (objNode.tagName != "SPAN") {
return;
}
window.opener.document.getElementById("txtUnit").value = objNode.getAttribute("innerHtml");
window.opener.document.getElementById("txtUnitID").value = unitid;
window.close();
} Value值绑定技巧与服务器端取值
此处采用了一种变通方法:由于难以直接通过标准属性获取绑定给TreeView的ValueField值,因此将Value值同时绑定至NavigateUrl属性。上述黄色高亮代码部分即为此目的而设,对应的HTML代码如下:
HTML结构代码如下:
<asp:TreeView ID="TreeView1" runat="server" ExpandDepth="1">
<DataBindings>
<asp:TreeNodeBinding TextField="NAME" ValueField="Value" NavigateUrlField="Value" SelectAction="None" />
</DataBindings>
</asp:TreeView> 红色标记部分代码用于获取TreeView上显示的文本。查看页面源码可知,TreeView的Text属性值实际被渲染在SPAN标签内。
绿色标记部分代码用于向父页面回填数据。需注意,目标控件"txtUnit"必须为客户端控件;若使用服务器端控件,弹窗在编译时会报错提示控件不存在。
至此,所需功能已实现。另有疑问:若父页面使用客户端控件装载回填值,如何在服务器端事件中获取该值?解决方法很简单,C#代码如下:
Request.Form["txtUnit"].ToString();
但需注意,此处的"txtUnit"并非控件ID,而是HTML元素的name属性值。
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
