我在ASP.NET中使用C#2.0和Visual Studio 2005.我正在使用母版页和内容页。我在母版页中有一个树视图菜单,当用户选择任何菜单项时,我会重定向到该内容页面。
我的问题是,在用户导航到内容页面后,所有treenodes刷新并且结构已折叠。我希望所选的treenode保持扩展。
有人可以帮帮我吗?
答案 0 :(得分:17)
当您刷新树视图时,您想要调用treeView1.ExpandAll();
还为BeforeCollapse添加一个事件,并将事件的Cancel属性设置为true,以防止用户折叠您的treenodes。
private void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = true;
}
希望这有帮助。
-jeremy
答案 1 :(得分:2)
如果您使用SiteMapDataSource控件作为TreeView的数据源,这是一个很常见的问题,由ASP.NET自动处理。在这种情况下,您还没有提到TreeView的数据源是什么。
您还没有提到TreeView是否包含链接(设置了NavigateUrl
属性)或者每次点击都回发的文本项。如果是前者,那么据我所知,你运气不好!这是因为没有针对设置了NavigateUrl
的TreeNode引发选择事件。它们只是作为常规超链接运行。
但是,如果是后者,那么您可以尝试以下步骤:
a。处理TreeView的SelectedNodeChanged
事件。在此事件处理程序中,检索SelectedNode.ValuePath
属性的当前值并将其存储在ViewState / Session中。使用SelectedNode的Value
有条件地将页面重定向到映射到它的URL。
如下所示:
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeNode selNode = TreeView1.SelectedNode;
string pathToNode = selNode.ValuePath;
Session.Add("SelPath", pathToNode);
switch (selNode.Value)
{
//Redirect to URL accordingly.
}
}
b。在主页面(您重定向的页面)的后续加载中,检索先前设置的ValuePath
的值并找到之前选择的节点并{{1它。
如下所示:
Expand
请注意,我没有机会测试代码,所以这主要是假设的。
答案 2 :(得分:0)
尝试使用OnTreeNodeDataBound事件和treeView.SelectedNode属性
此外,可能想要检查将TreeView绑定到DataSource的方式/时间。你可能会在IsPostBack上重新绑定它,它会重新渲染树。
TreeView应该在PostBack上维护它的节点。
答案 3 :(得分:0)
即使您使用母版页,一旦用户导航到内容页面,它将呈现为新的/不同的页面。由于Master页面加载了相同的树视图但不是同一个实例。您需要存储和加载扩展的节点。