asp.net中的treeview控件为啥只能选中同一级的第一个节点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net中的treeview控件为啥只能选中同一级的第一个节点?相关的知识,希望对你有一定的参考价值。

初始化代码:private void InitTreeView(TreeNodeCollection treenodes, string directorypath)//初始化树控件

i++;
if (Directory.Exists(Server.MapPath(directorypath)))

//所有子文件夹
foreach (string item in Directory.GetDirectories(Server.MapPath(directorypath)))

DirectoryInfo directoryinfo = new DirectoryInfo(item);
TreeNode tn = new TreeNode(directoryinfo.Name, i.ToString(), "images/1.gif", "changefolder.aspx", "");
InitTreeView(tn.ChildNodes, directorypath + "/" + directoryinfo.Name);
treenodes.Add(tn);

先分析原因。
你出现这个错误是因为你没有了解ASP.NET的工作原理。ASP.Net 和php,jsp ,asp等服务器语言一样 都是为了生成可供浏览器解析的页面,而可供浏览器解析的语言只有html

1,如果你在aspx页面中插入一个asp:LinkButton 那么运行页面后 在浏览器中查看源代码你会发现这个标签实际被转为了一个<a>标签。
2,为什么你的写法不会转换呢?因为首先 传递给Literal1.Text 的值在asp.net中作为一段字符串被直接输出到浏览器中。那么你的写法到浏览器后源代码中仍然是一个asp:LinkButton 标签,而这个标签是无法被浏览器正确解析的。

解决办法:
知道了原因,那么如果非要按照你的写法去写,那么应该是这样的:
Literal1.Text = "<li>" + ((users)Session["users"]).Name.ToString() + "</li><li> </li><li><a ID='LinkButton1' onclick='LinkButton1_Click1'>注销</a></li><li> </li><li>信息修改</li><li> </li>";
但是当你修改完后发现点击注销按钮依然不能执行!为什么呢?
因为你的LinkButton1_Click1 事件并没有在asp.net中被解析为可供浏览器识别的js代码。

如何解决?

在aspx页面中写一个asp:LinkButton按钮:
<asp:LinkButton ID='LinkButton2' runat='server' onclick='LinkButton1_Click1'>注销</asp:LinkButton>

运行页面,查看源代码 看看这个新加的注销按钮被解析为了什么html代码,大概如下
<a id="LinkButton2" onclick="xxxxx"></a>

将新加的linkbutton 设置不可见属性
<asp:LinkButton ID='LinkButton2' runat='server' visible="false" onclick='LinkButton1_Click1'>注销</asp:LinkButton>

重新修改后台代码
Literal1.Text = "<li>" + ((users)Session["users"]).Name.ToString() + "</li><li> </li><li><a ID='LinkButton1' onclick='xxxxx'>注销</a></li><li> </li><li>信息修改</li><li> </li>";
//也就是将标签的js事件绑定到那个隐藏的注销按钮事件上。
希望对你有帮助
参考技术A 零基础asp.net就业班

winform 中Treeview控件怎样选中父节点时子节点全部展开,选中其他父节点时原先展开的关闭

winform 中Treeview控件怎样选中父节点时子节点全部展开,选中其他父节点时原先展开的关闭,就像windows系统的资源管理器一样。要求详细一点。

AfterSelect事件中写:首先判断这个节点是不是父节点(NODES有一个NAME属性,你可以写节点0,节点1什么的,然后this.treeView1.SelectedNode.Name判断),如果是则写this.treeView1.CollapseAll();this.treeView1.SelectedNode.Expand(),不是就不做任何事 参考技术A 选父节点展开有个属性,你找下,选其他父节点你可以先全部关闭然后再展开当前的追问

详细点行么?

参考技术B 讲父节点获取赋给一个treenode 对象,用这个treenode对象调用ExpandAll ()方法

以上是关于asp.net中的treeview控件为啥只能选中同一级的第一个节点?的主要内容,如果未能解决你的问题,请参考以下文章

使用treeview控件读数据库动态生成带checkbox复选框的树形导航菜单asp.net(C#),急求帮助还可加分

asp.net控件treeview如何实现无刷新效果

asp.net控件treeview如何实现无刷新效果

ASP.NET中使用TreeView控件

ASP.NET中,点TREE的节点,无刷新

哪个 jQuery/css 菜单库用于使用 ASP.NET TreeView 或菜单控件