在我的 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事件?
答案 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)
Treeview有onSelectedNodeChanged事件,您可以在http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treeview.selectednodechanged.aspx
查看答案 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);
}
}