Hello,
I am trying to figure out how to disable the ability to click a root item in the RadMenu control or at least stop the selected style from applying to it. The radmenu is populated via a sitemap file and the root nodes do not have a URL defined for them. I have tried to set all root items with the postback of false via the code below:
Protected Sub rmMainMenu_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) _ |
Handles rmMainMenu.DataBound |
For Each rootItem As RadMenuItem In sender.Items |
rootItem.PostBack = False |
Next |
End Sub |
However, this doesn't do anything and I can still click the node and when I do, the clicked style will still apply. The only time I want the clicked selected style to apply to the root node is if a child node has been selected. Any assistance would be greatly appreciated.
Thanks,
Ron
6 Answers, 1 is accepted

function onClicking(sender, eventArgs) |
{ |
var item = eventArgs.get_item(); |
//root node should be 0 |
if (item.get_index() == 0) |
{ |
eventArgs.set_cancel(false); |
} |
} |
I think that should take care of it.

I added this, but I am getting an error, below is my markup for the radmenu and the code you provided and following is the error:
function onClicking(sender, eventArgs) { |
var item = eventArgs.get_item(); |
if (item.get_index() == 0); |
{ |
eventArgs.set_cancel(false); |
} |
} |
<telerik:RadMenu ID="rmMainMenu" runat="server" DataSourceID="topMenu" CssClass="mainmenu" Width="100%" OnClientItemClicking="onClicking();" /> |
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; Tablet PC 2.0)
Timestamp: Fri, 4 Dec 2009 16:21:33 UTC
Message: Expected '}'
Line: 145
Char: 1143
Code: 0
URI: http://mtcdev:603/
Message: 'null' is null or not an object
Line: 58
Char: 21
Code: 0
URI: http://mtcdev:603/
Thanks,
Ron

<html xmlns="http://www.w3.org/1999/xhtml"> |
<head runat="server"> |
<title></title> |
<telerik:RadCodeBlock ID="myCodeBlock" runat="server"> |
<script type="text/javascript"> |
function onClicking(sender, eventArgs) { |
var item = eventArgs.get_item(); |
if (item.get_index() == "0"); |
{ |
eventArgs.set_cancel(false); |
} |
} |
</script> |
</telerik:RadCodeBlock> |
</head> |
<body> |
<form id="form1" runat="server"> |
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"> |
</telerik:RadScriptManager> |
<telerik:RadMenu ID="RadMenu1" runat="server" OnClientItemClicking="onClicking"> |
<Items> |
<telerik:RadMenuItem runat="server" Text="Root RadMenuItem1" Selected="false"> |
<Items> |
<telerik:RadMenuItem runat="server" Text="Child RadMenuItem 1"> |
</telerik:RadMenuItem> |
<telerik:RadMenuItem runat="server" Text="Child RadMenuItem 2"> |
</telerik:RadMenuItem> |
<telerik:RadMenuItem runat="server" Text="Child RadMenuItem 3"> |
</telerik:RadMenuItem> |
</Items> |
</telerik:RadMenuItem> |
</Items> |
</telerik:RadMenu> |
</form> |
</body> |
</html> |
This cancels the clicking :)

<html xmlns="http://www.w3.org/1999/xhtml"> |
<head runat="server"> |
<title>Messaging Administration Center</title> |
<link href="Appearance/Styles/StyleSheet.css" rel="stylesheet" type="text/css" /> |
<telerik:RadStyleSheetManager id="RadStyleSheetManager" runat="server" /> |
<telerik:RadCodeBlock ID="myCodeBlock" runat="server"> |
<script type="text/javascript"> |
function onClicking(sender, eventArgs) { |
var item = eventArgs.get_item(); |
if (item.get_index() == "0"); |
{ |
eventArgs.set_cancel(false); |
} |
} |
function pageLoad() { |
var divContainer = $find('<%= bottomLeftPane.ClientID %>'); |
var panelbar = $find('<%= RadPanelBar1.ClientID %>'); |
divContainer.set_minHeight(panelbar.get_element().offsetHeight); |
divContainer.set_maxHeight(panelbar.get_element().offsetHeight); |
} |
</script> |
</telerik:RadCodeBlock> |
</head> |
<body> |
<form id="masterForm" runat="server"> |
<telerik:RadSkinManager ID="RadSkinManager1" Runat="server" Skin="Office2007" /> |
<telerik:RadScriptManager ID="RadScriptManager" runat="server"> |
<Scripts> |
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" /> |
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" /> |
</Scripts> |
</telerik:RadScriptManager> |
<telerik:RadSplitter runat="Server" ID="RadSplitter1" Width="100%" BorderSize="0" |
BorderStyle="None" PanesBorderSize="0" Height="100%" Orientation="Horizontal" |
VisibleDuringInit="false"> |
<telerik:RadPane ID="headerPane" runat="server" Height="74px"> |
<div class="header"> |
<div class="logo"> |
<div class="company"></div> |
</div> |
</div> |
<telerik:RadMenu ID="rmMainMenu" runat="server" DataSourceID="topMenu" CssClass="mainmenu" Width="100%" OnClientItemClicking="onClicking" /> |
</telerik:RadPane> |
<telerik:RadPane runat="server" ID="contentPane" Scrolling="none"> |
<telerik:RadSplitter runat="server" ID="RadSplitter2" BorderStyle="None" PanesBorderSize="0"> |
<telerik:RadPane runat="Server" ID="leftPane" Width="240" Scrolling="None"> |
<telerik:RadSplitter runat="server" ID="RadSplitter3" BorderStyle="None" PanesBorderSize="0" |
Height="100%" Orientation="Horizontal"> |
<telerik:RadPane runat="server" ID="topLeftPane"> |
<asp:ContentPlaceHolder ID="cphBodyLeft" runat="server" /> |
</telerik:RadPane> |
<telerik:RadSplitBar runat="server" ID="RadSplitBar3" CollapseMode="Backward" EnableResize="false" /> |
<telerik:RadPane runat="server" ID="bottomLeftPane"> |
<telerik:RadPanelBar runat="server" ID="RadPanelBar1" DataSourceID="sideMenu" Width="100%" /> |
</telerik:RadPane> |
</telerik:RadSplitter> |
</telerik:RadPane> |
<telerik:RadSplitBar runat="server" ID="RadSplitBar1" CollapseMode="Forward" EnableResize="false" /> |
<telerik:RadPane runat="Server" ID="rightPane" CssClass="right-pane" Scrolling="Both"> |
<asp:ContentPlaceHolder ID="cphBodyRight" runat="server" /> |
</telerik:RadPane> |
</telerik:RadSplitter> |
</telerik:RadPane> |
</telerik:RadSplitter> |
<asp:SiteMapDataSource ID="topMenu" runat="server" ShowStartingNode="False" SiteMapProvider="topmenu" /> |
<asp:SiteMapDataSource ID="sideMenu" runat="server" ShowStartingNode="False" SiteMapProvider="sidemenu" /> |
<div class="user">Welcome Ron Montecalvo</div> |
</form> |
</body> |
</html> |
Thanks for the quick replies!


Below is the code I used to achieve this:
Protected Sub mainMenu_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadMenuEventArgs) _ |
Handles mainMenu.ItemDataBound |
Dim nodeFromSiteMap As SiteMapNode = CType(e.Item.DataItem, SiteMapNode) |
'Hide items I do not want to directly navigate too |
e.Item.Visible = nodeFromSiteMap("visible") |
'If root item, set url to not navigate and do not apply styles when clicked |
If nodeFromSiteMap("type") = "root" Then |
e.Item.NavigateUrl = "#" |
e.Item.SelectedCssClass = "" |
e.Item.FocusedCssClass = "" |
End If |
End Sub |
In the above I define two custom attributes in my sitemap file. One is "visible" for those items I do not wish to be shown in the menu as a direct navigation link so I set the Visible property to "false". The other is "type" which I use to define an item as a "root" item. Here I set the NavigateUrl to "#" so it will not navigate to anything. I set the SelectedCssClass and FocusedCssClass to "" so that if a user clicks the item it does not apply any of the styles to it. However it will still allow the items to apply the correct style if a child item is selected.
Hope that helps anyone else looking to so the same.