Hi,
I'm attempting to dynamically create a RadContextMenu inside an asp.net server control. Whilst the Context Menu appears to be created/rendered correctly, I am unable to get any menu items to actually create. Checking the rendered markup - it appears that these items never actually make it onto the page.
Below is a sample of my code, can anyone indicate what I am doing wrong?
Thanks
Fergal
I'm attempting to dynamically create a RadContextMenu inside an asp.net server control. Whilst the Context Menu appears to be created/rendered correctly, I am unable to get any menu items to actually create. Checking the rendered markup - it appears that these items never actually make it onto the page.
Below is a sample of my code, can anyone indicate what I am doing wrong?
Imports
System.Web.UI.WebControls
Imports
Telerik.Web.UI
<ParseChildren(
True
,
"MenuItems"
)>
Public
Class
SplitButton
Inherits
WebControl
Private
_MenuItems
As
New
List(Of MenuItem)
Private
_Button
As
RadButton
Private
_ContextMenu
As
RadContextMenu
Public
Property
MenuItems()
As
List(Of MenuItem)
Get
Return
_MenuItems
End
Get
Set
(
ByVal
value
As
List(Of MenuItem))
_MenuItems = value
End
Set
End
Property
Public
Property
Text
As
String
Public
Property
IconUrl
As
String
Private
Sub
BuildContextMenu()
_ContextMenu =
New
RadContextMenu()
With
{.ID =
String
.Format(
"{0}_Menu"
,
Me
.ID)}
Me
.Controls.Add(_ContextMenu)
Dim
x
As
New
List(Of RadMenuItem)
For
Each
item
As
MenuItem
In
MenuItems
Dim
menuItem
As
New
RadMenuItem()
With
{.Text = item.Text, .Value = item.Value, .Visible = item.Visible, .ImageUrl = item.IconUrl, .PostBack = item.PostBack}
x.Add(menuItem)
Next
_ContextMenu.Items.AddRange(x)
End
Sub
Private
Sub
BuildButton()
_Button =
New
RadButton()
With
{.ID =
String
.Format(
"{0}_Button"
,
Me
.ID)}
_Button.OnClientClicked =
"SplitButton_OnClientClicked"
_Button.Attributes.Add(
"data-contextmenu"
, _ContextMenu.ClientID)
_Button.Text = Text
_Button.Icon.PrimaryIconUrl = IconUrl
_Button.EnableSplitButton =
True
Me
.Controls.Add(_Button)
End
Sub
Private
Sub
SplitButton_Init(
ByVal
sender
As
Object
,
ByVal
e
As
EventArgs)
Handles
Me
.Init
BuildContextMenu()
End
Sub
Private
Sub
SplitButton_PreRender(
ByVal
Sender
As
Object
,
ByVal
e
As
EventArgs)
Handles
Me
.PreRender
BuildButton()
End
Sub
End
Class
Public
Class
MenuItem
Public
Property
IconUrl
As
String
Public
Property
Text
As
String
Public
Property
Value
As
String
Public
Property
PostBack
As
Boolean
Public
Property
Visible
As
Boolean
End
Class
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="Grid_SplitButtonDemo.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Register Assembly="GridSplitButtonDemo" Namespace="Grid_SplitButtonDemo" TagPrefix="a" %>
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
>SplitButton Demo</
title
>
<
script
type
=
"text/javascript"
>
function SplitButton_OnClientClicked(sender, args)
{
//Check if we clicked the splitbutton portion, or the button portion
if (args.IsSplitButtonClick())
{
//Show the context menu below the selected button.
var currentLocation = $telerik.getLocation(sender.get_element());
var contextMenu = $find(sender.get_element().getAttribute('data-contextmenu'));
//alert(contextMenu.get_items().get_count());
contextMenu.showAt(currentLocation.x, currentLocation.y + 22);
//Prevent postback.
sender.set_autoPostBack(false);
}
else
{
//Button portion clicked, Perform the default action.
alert("Perform Default Action");
sender.set_autoPostBack(true);
}
}
</
script
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
asp:ScriptManager
ID
=
"ScriptManager1"
runat
=
"server"
>
</
asp:ScriptManager
>
<
h2
>
SplitButton Demo
</
h2
>
<
div
>
<
a:SplitButton
runat
=
"server"
ID
=
"btnActions"
Text
=
"Edit"
IconUrl
=
"Images/pencil.png"
>
<
a:MenuItem
IconUrl
=
"Images/Remove.png"
Text
=
"Delete"
Value
=
"Delete"
PostBack
=
"false"
/>
<
a:MenuItem
IconUrl
=
"Images/wand.png"
Text
=
"Add Another"
Value
=
"NewAnother"
/>
</
a:SplitButton
>
</
div
>
</
form
>
</
body
>
</
html
>
Thanks
Fergal