如何获取当前在TreeView控件中展开的节点

时间:2012-02-23 10:54:36

标签: asp.net redirect treeview expand

在我的 ASP.NET Web窗体应用程序中,我有一个 download.aspx 页面布局。在左侧窗格中,我有一个 TreeView控件,在右侧窗格中,我会在用户选择叶节点后显示一些内容。

如果用户(未登录)单击需要授权的 TreeView 的叶节点,则会将用户发送到登录组件并且,在执行登录后,它会被重定向到download.aspx, TreeView未展开

我想通过将用户(登录后)重定向到下载页面来更改此行为,其中 TreeView展开,就像之前他/她被发送到登录组件一样。

我没有设计页面,我从不广泛使用TreeView。我的第一个猜测,因为我没有看到任何QueryString ,节点扩展是由 JavaScript(或JScript)处理程序管理的,它处理 onExpand TreeView的事件,并从数据库中异步获取子节点。但是我不确定它是那样的。

我的想法是创建一个会话状态对象 Session [“downloadTVdepth”] ,其中,每当用户展开一个节点时,我会以某种方式存储他/她已到达的节点。因此,当从登录组件重定向到downloads.aspx时,代码会检查是否存在 Session [“downloadTVdepth”] 值,并且eventuallty会扩展树。

我的方法是否正确?如何获取有关扩展的TreeView节点的信息?如何在用户不实际扩展节点的情况下启动onExpand事件?

3 个答案:

答案 0 :(得分:1)

如何为每个TreeNode设置TreeNode.NavigateUrl,然后通过url传递自定义参数。

string nodeText = ...;
string nodeId = ...;
var node = new TreeNode(nodeText, nodeId) 
   {
     NavigateUrl = String.Format("~/download.aspx?CurrentId={0}", nodeId);
   };

tree.Nodes.Add(node);

然后在页面的Page_Load()中,您可以检查Request.QueryString["CurrentId"]值。

如果您使用Forms Authenticalion构建,可能会发现有用的RedirectUrl功能,请参阅this article以获取示例说明。

答案 1 :(得分:1)

答案 2 :(得分:0)

这很简单。下面,您可以看到我的递归版本:

//List of storage ids of expanded nodes
List<int> expandedNodeIds = new List<int>();
//call recursive fun for our tree
CollectExpandedNodes(tree.Nodes);
//recursive fun for collect expanded node ids
private void CollectExpandedNodes(TreeListNodes nodes)
{
   foreach (TreeListNode node in nodes)
   {
      if (node.Expanded) expandedNodeIds.Add(node.Id);
      if (node.HasChildren) CollectExpandedNodes(node.Nodes);
   }
}