logo

使用 JavaScript 得到 ASP.NET TreeView 控件的选中的节点

作者:孟宪会 阅读:3075 发表于:2010-11-15 16:51:56

其实,ASP.NET本身就提供了一个简单的方法获得所选择节点的Text和Value属性了。我们先看看ASP.NET关于 TreeView 控件生成的代码:

首先:会有下面一个表单控件;

HTML 代码
<input type="hidden" name="TreeView1_SelectedNode" id="TreeView1_SelectedNode" value="" />
再次:会有下面的一个Form对象的定义;
JavaScript 代码
var theForm = document.forms['form1'];
if (!theForm) {
    theForm
= document.form1;
}
接着,会有2段脚本资源的引用:
HTML 代码
<script src="/WebSite1/WebResource.axd?d=HrSxn51SCVtJIIHuVWDUljVNjC0Ga-dPM3AH-
Hu07ok0KPDC37khkhdp0k3BKUwnYblLYsIQUYfYLnVajZz4JnQe_ImedZQ28HSACAu3BY41&amp;t=634221208816441802"
type="text/javascript"></script>

<script src="/WebSite1/WebResource.axd?
d=cRb87h5TjCoB991MCwmuiagyyjJipEKTdmBwvI7oEW81cxsMT_kCKzcgneLQdKt4c43HXATD4_3BMJ0gCqTi687dcK_XH_kMTKheJxgbrqY1&amp;t=634221208816441802"

type
="text/javascript"></script>
然后,就是一个自定义对象,记录一些在点击过程中记录的一些数据:
JavaScript 代码
WebForm_InitCallback();
var TreeView1_Data = new Object();
TreeView1_Data.selectedNodeID
= theForm.elements['TreeView1_SelectedNode'];
关键的地方就是这个 TreeView1_Data 对象。下面看看每个节点的HTML代码:
HTML 代码
<a class="TreeView1_0" href="javascript:__doPostBack(&#39;TreeView1&#39;,&#39;s孟子E章&#39;)" onclick="TreeView_SelectNode(TreeView1_Data, this,&#39;TreeView1t1&#39;);" id="TreeView1t1">孟子E章</a>
我们看到,在节点点击时执行了TreeView_SelectNode 方法,这个方法定义是:
JavaScript 代码
function TreeView_SelectNode(data, node, nodeId) {
    
if (!data) {
        
return;
    }
    
if ((typeof(data.selectedClass) != "undefined") && (data.selectedClass != null)) {
        
var id = data.selectedNodeID.value;
        
if (id.length > 0) {
            
var selectedNode = document.getElementById(id);
            
if ((typeof(selectedNode) != "undefined") && (selectedNode != null)) {
                WebForm_RemoveClassName(selectedNode, data.selectedHyperLinkClass);
                selectedNode
= WebForm_GetParentByTagName(selectedNode, "TD");
                WebForm_RemoveClassName(selectedNode, data.selectedClass);
            }
        }
        WebForm_AppendToClassName(node, data.selectedHyperLinkClass);
        node
= WebForm_GetParentByTagName(node, "TD");
        WebForm_AppendToClassName(node, data.selectedClass)
    }
    data.selectedNodeID.value
= nodeId;
}

因此,在每次点击时,就会记录下所点击的节点的id,根据这个id就可以得到所选择的节点的内容了:
JavaScript 代码
<script type="text/javascript">
  
function GetSelectedNode() {
    
var selectedNodeID = theForm.elements["<%=TreeView1.ClientID%>_SelectedNode"].value;
    
if (selectedNodeID != "") {
      
var selectedNode = document.getElementById(selectedNodeID);
      
var value = selectedNode.href.substring(selectedNode.href.indexOf(",") + 3, selectedNode.href.length - 2);
      
var text = selectedNode.innerHTML;
      alert(
"Text = " + text + "\r\n" + "Value = " + value)
    }
    
else {
      alert(
"没有选择节点。")
    }

    
// 也可以使用内置的对象  
    // var treeViewData = window["<%=TreeView1.ClientID%>" + "_Data"];
    // selectedNodeID = treeViewData.selectedNodeID.value
    return false;
  }  
</script>

完整的测试代码如下:
ASPX 代码
<%@ Page Language="C#" EnableViewState="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  
<title></title>
<script type="text/javascript">
  
function GetSelectedNode() {
    
var selectedNodeID = theForm.elements["<%=TreeView1.ClientID%>_SelectedNode"].value;
    
if (selectedNodeID != "") {
      
var selectedNode = document.getElementById(selectedNodeID);
      
var value = selectedNode.href.substring(selectedNode.href.indexOf(",") + 3, selectedNode.href.length - 2);
      
var text = selectedNode.innerHTML;
      alert(
"Text = " + text + "\r\n" + "Value = " + value)
    }
    
else {
      alert(
"没有选择节点。")
    }

    
// 也可以使用内置的对象  
    // var treeViewData = window["<%=TreeView1.ClientID%>" + "_Data"];
    // selectedNodeID = treeViewData.selectedNodeID.value
    return false;
  }  
</script>
</head>
<body>
  
<form id="form1" runat="server">
  
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True">
    
<Nodes>
      
<asp:TreeNode Text="孟宪会"></asp:TreeNode>
      
<asp:TreeNode Text="孟子E章">
        
<asp:TreeNode Text="网站" Value="http://dotnet.aspx.cc"></asp:TreeNode>
      
</asp:TreeNode>
      
<asp:TreeNode Text="Blog" Value="http://blog.csdn.net/net_lover/"></asp:TreeNode>
    
</Nodes>
  
</asp:TreeView>
  
<asp:Button ID="Button1" runat="server" Text="得到选择的节点" OnClientClick="return GetSelectedNode();" />
  
</form>
</body>
</html>