I took the Treeview Context Menu demo code from here: Context Menu Demo, slightly modified it, and now when I either try to Copy or Create a new node it produces 2 nodes instead of one.
Example, right-click, choose New Folder and then get 2 instead of one. Same with Copy: What am I doing wrong here? Using the latest Chrome and IE11 as well as latest Telerik version.
![]()
![]()
Code-behind:
Example, right-click, choose New Folder and then get 2 instead of one. Same with Copy: What am I doing wrong here? Using the latest Chrome and IE11 as well as latest Telerik version.
01.<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>02. 03.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">04. 05.<html xmlns="http://www.w3.org/1999/xhtml">06.<head runat="server">07. <title></title>08. <telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" />09.</head>10.<body>11. <form id="form1" runat="server">12. <telerik:RadScriptManager ID="RadScriptManager1" runat="server">13. <Scripts>14. <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />15. <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />16. <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />17. </Scripts>18. </telerik:RadScriptManager>19. <script type="text/javascript">20. //<!--21. function onClientContextMenuShowing(sender, args) {22. var treeNode = args.get_node();23. treeNode.set_selected(true);24. //enable/disable menu items25. setMenuItemsState(args.get_menu().get_items(), treeNode);26. }27. 28. function onClientContextMenuItemClicking(sender, args) {29. var menuItem = args.get_menuItem();30. var treeNode = args.get_node();31. 32. menuItem.get_menu().hide();33. 34. switch (menuItem.get_value()) {35. case "Copy":36. break;37. case "Rename":38. treeNode.startEdit();39. break;40. case "NewFolder":41. break;42. case "Delete":43. var result = confirm("Are you sure you want to delete the item: " + treeNode.get_text());44. args.set_cancel(!result);45. break;46. }47. }48. 49. //this method disables the appropriate context menu items50. function setMenuItemsState(menuItems, treeNode) {51. for (var i = 0; i < menuItems.get_count() ; i++) {52. var menuItem = menuItems.getItem(i);53. switch (menuItem.get_value()) {54. case "NewFolder":55. //nothing56. break;57. default:58. if (treeNode.get_parent() == treeNode.get_treeView()) {59. menuItem.set_enabled(false);60. }61. else {62. menuItem.set_enabled(true);63. }64. break;65. }66. }67. }68. //-->69. </script>70. <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" UpdatePanelsRenderMode="Inline">71. </telerik:RadAjaxManager>72. <telerik:RadWindowManager ID="RadWindowManager1" runat="server"></telerik:RadWindowManager>73. <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel2" runat="server" Skin="Default"></telerik:RadAjaxLoadingPanel>74. <telerik:RadAjaxPanel ID="RadAjaxPanel2" runat="server" LoadingPanelID="RadAjaxLoadingPanel2">75. <telerik:RadTreeView ID="rtvSavedReports" runat="server" AllowNodeEditing="True" EnableDragAndDrop="False" EnableDragAndDropBetweenNodes="False" OnContextMenuItemClick="rtvSavedReports_ContextMenuItemClick"76. OnClientContextMenuItemClicking="onClientContextMenuItemClicking" OnClientContextMenuShowing="onClientContextMenuShowing"77. OnNodeEdit="rtvSavedReports_NodeEdit">78. <ContextMenus>79. <telerik:RadTreeViewContextMenu ID="MainContextMenu" runat="server">80. <Items>81. <telerik:RadMenuItem Value="Copy" Text="Copy ..." ImageUrl="~/images/10.gif">82. </telerik:RadMenuItem>83. <telerik:RadMenuItem Value="Rename" Text="Rename ..." Enabled="false" ImageUrl="~/images/rename.gif">84. </telerik:RadMenuItem>85. <telerik:RadMenuItem Value="NewFolder" Text="New Folder" ImageUrl="~/images/12.gif">86. </telerik:RadMenuItem>87. <telerik:RadMenuItem Value="Delete" Text="Delete Folder" ImageUrl="~/images/7.gif">88. </telerik:RadMenuItem>89. </Items>90. <CollapseAnimation Type="none"></CollapseAnimation>91. </telerik:RadTreeViewContextMenu>92. </ContextMenus>93. </telerik:RadTreeView>94. </telerik:RadAjaxPanel>95. </form>96.</body>97.</html>01.Imports Telerik.Web.UI02. 03.Partial Class Default204. Inherits System.Web.UI.Page05. 06. Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load07. If Not IsPostBack Then08. PopulateSaveTrees()09. End If10. End Sub11. 12. 13. Private Sub PopulateSaveTrees()14. Dim savedTreeXML As Object = GetSavedTree()15. If savedTreeXML Is DBNull.Value Then16. 'first time create17. rtvSavedReports.LoadXml("<Tree><Node Text=""Saved Reports"" Value=""/"" AllowEdit=""False"" ImageUrl=""~/images/folder.png""/></Tree>")18. Else19. rtvSavedReports.LoadXml(savedTreeXML)20. End If21. End Sub22. 23. 24. Protected Sub rtvSavedReports_ContextMenuItemClick(sender As Object, e As RadTreeViewContextMenuEventArgs) Handles rtvSavedReports.ContextMenuItemClick25. Dim clickedNode As RadTreeNode = e.Node26. 27. Select Case e.MenuItem.Value28. Case "Copy"29. Dim clonedNode As RadTreeNode = clickedNode.Clone()30. clonedNode.Text = String.Format("Copy of {0}", clickedNode.Text)31. clickedNode.InsertAfter(clonedNode)32. 'set node's value so we can find it in startNodeInEditMode33. clonedNode.Value = clonedNode.GetFullPath("/")34. clonedNode.Selected = True35. StartNodeInEditMode(clonedNode.Value)36. Case "NewFolder"37. Dim newFolder As New RadTreeNode(String.Format("New Folder {0}", clickedNode.Nodes.Count + 1))38. newFolder.Selected = True39. newFolder.ImageUrl = clickedNode.ImageUrl40. clickedNode.Nodes.Add(newFolder)41. clickedNode.Expanded = True42. newFolder.Value = newFolder.GetFullPath("/")43. StartNodeInEditMode(newFolder.Value)44. Case "Delete"45. If clickedNode.Nodes.Count <> 0 Then46. RadScriptManager.RegisterStartupScript(Page, Page.[GetType](), "nodedeleteerror", "alert('Cannot delete node with children!\nEither delete or move all children.');", True)47. Exit Select48. End If49. clickedNode.Remove()50. End Select51. End Sub52. 53. Private Sub StartNodeInEditMode(ByVal nodeValue As String)54. 'find the node by its Value and edit it when page loads55. Dim js As String = "Sys.Application.add_load(editNode); function editNode(){ "56. js += "var tree = $find(""" + rtvSavedReports.ClientID + """);"57. js += "var node = tree.findNodeByValue('" + nodeValue + "');"58. js += "if (node) node.startEdit();"59. js += "Sys.Application.remove_load(editNode);};"60. 61. RadScriptManager.RegisterStartupScript(Page, Page.[GetType](), "nodeEdit", js, True)62. End Sub63. 64. Protected Sub rtvSavedReports_NodeEdit(sender As Object, e As RadTreeNodeEditEventArgs) Handles rtvSavedReports.NodeEdit65. e.Node.Text = e.Text66. End Sub67. 68. Private Function GetSavedTree() As Object69. Return DBNull.Value70. End Function71. 72.End Class