or
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadStyleSheetManager
ID
=
"RadStyleSheetManager1"
runat
=
"server"
/>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
<
Scripts
>
<%--Needed for JavaScript IntelliSense in VS2010--%>
<%--For VS2008 replace RadScriptManager with ScriptManager--%>
<
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"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQueryInclude.js"
/>
</
Scripts
>
</
telerik:RadScriptManager
>
<
script
type
=
"text/javascript"
>
//Put your JavaScript code here.
</
script
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RibbonBarButton1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"PlaceHolder1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"hf"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"RibbonBarButton2"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"PlaceHolder1"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"hf"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
div
>
<
telerik:RadRibbonBar
ID
=
"RadRibbonBar1"
runat
=
"server"
Width
=
"900px"
Style
=
"max-width: 900px;"
Skin
=
"Office2010Silver"
EnableMinimizing
=
"true"
>
<
telerik:RibbonBarTab
Text
=
"UC"
>
<
telerik:RibbonBarGroup
Text
=
"UC1"
ID
=
"RibbonBarGroup1"
>
<
Items
>
<
telerik:RibbonBarButton
Size
=
"Large"
Text
=
"UC1"
ImageUrlLarge
=
"/images/icons/docs_32.png"
ID
=
"RibbonBarButton1"
/>
</
Items
>
</
telerik:RibbonBarGroup
>
<
telerik:RibbonBarGroup
Text
=
"UC2"
ID
=
"RibbonBarGroup2"
>
<
Items
>
<
telerik:RibbonBarButton
Size
=
"Large"
Text
=
"UC2"
ImageUrlLarge
=
"/images/icons/docs_32.png"
ID
=
"RibbonBarButton2"
/>
</
Items
>
</
telerik:RibbonBarGroup
>
</
telerik:RibbonBarTab
>
</
telerik:RadRibbonBar
>
<
asp:PlaceHolder
ID
=
"PlaceHolder1"
runat
=
"server"
></
asp:PlaceHolder
>
</
div
>
<
asp:Label
ID
=
"hf"
Text
=
""
runat
=
"server"
Visible
=
"false"
/>
</
form
>
</
body
>
</
html
>
Imports
Telerik.Web.UI
Partial
Class
_Default
Inherits
System.Web.UI.Page
Protected
Sub
RadRibbonBar1_ButtonClick(sender
As
Object
, e
As
RibbonBarButtonClickEventArgs)
Handles
RadRibbonBar1.ButtonClick
If
e.Button.ID.ToString =
"RibbonBarButton1"
Then
LoadUserControl(
"UC1"
)
ElseIf
e.Button.ID.ToString =
"RibbonBarButton2"
Then
LoadUserControl(
"UC2"
)
End
If
End
Sub
Public
Sub
LoadUserControl(
ByVal
userControl
As
String
)
hf.Text = userControl
PlaceHolder1.Controls.Clear()
Dim
wuc
As
Web.UI.UserControl =
CType
(LoadControl(
"~/"
& userControl &
".ascx"
), Web.UI.UserControl)
wuc.ID = userControl
PlaceHolder1.Controls.Add(wuc)
End
Sub
Protected
Sub
Page_Load(sender
As
Object
, e
As
EventArgs)
Handles
Me
.Load
If
Page.IsPostBack
Then
If
hf.Text.Length > 2
Then
Dim
wuc
As
Web.UI.UserControl =
CType
(LoadControl(
"~/"
& hf.Text &
".ascx"
), Web.UI.UserControl)
wuc.ID = hf.Text
wuc.Visible =
False
PlaceHolder1.Controls.Add(wuc)
End
If
End
If
End
Sub
End
Class
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC1.ascx.vb" Inherits="UC1" %>
UC1<
br
/>
<
asp:Button
ID
=
"Button1"
runat
=
"server"
Text
=
"Open UC2"
/>
Partial
Class
UC1
Inherits
System.Web.UI.UserControl
Protected
Sub
Button1_Click(sender
As
Object
, e
As
EventArgs)
Handles
Button1.Click
' show the other control
Dim
wuc
As
Web.UI.UserControl =
CType
(LoadControl(
"~/UC2.ascx"
), Web.UI.UserControl)
Dim
holder
As
PlaceHolder =
CType
(ControlExtensions.FindControlRecursive(Page,
"PlaceHolder1"
), PlaceHolder)
wuc.ID =
"UC2"
wuc.Visible =
True
holder.Controls.Add(wuc)
Dim
hf
As
Label =
CType
(ControlExtensions.FindControlRecursive(Page,
"hf"
), Label)
hf.Text =
"UC2"
End
Sub
End
Class
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC2.ascx.vb" Inherits="UC2" %>
UC2<
br
/>
<
asp:Button
ID
=
"Button1"
runat
=
"server"
Text
=
"Open UC1"
/>
Partial
Class
UC2
Inherits
System.Web.UI.UserControl
Protected
Sub
Button1_Click(sender
As
Object
, e
As
EventArgs)
Handles
Button1.Click
' show the other control
Dim
wuc
As
Web.UI.UserControl =
CType
(LoadControl(
"~/UC1.ascx"
), Web.UI.UserControl)
Dim
holder
As
PlaceHolder =
CType
(ControlExtensions.FindControlRecursive(Page,
"PlaceHolder1"
), PlaceHolder)
wuc.ID =
"UC1"
wuc.Visible =
True
holder.Controls.Add(wuc)
Dim
hf
As
Label =
CType
(ControlExtensions.FindControlRecursive(Page,
"hf"
), Label)
hf.Text =
"UC1"
End
Sub
End
Class
Imports
Microsoft.VisualBasic
Public
Class
ControlExtensions
''' <summary>
''' recursively finds a child control of the specified parent.
''' </summary>
''' <param name="control"></param>
''' <param name="id"></param>
''' <returns></returns>
Public
Shared
Function
FindControlRecursive(
ByVal
control
As
Control,
ByVal
id
As
String
)
As
Control
If
control
Is
Nothing
Then
Return
Nothing
End
If
'try to find the control at the current level
Dim
ctrl
As
Control = control.FindControl(id)
If
ctrl
Is
Nothing
Then
'search the children
For
Each
child
As
Control
In
control.Controls
ctrl = FindControlRecursive(child, id)
If
Not
ctrl
Is
Nothing
Then
Exit
For
End
If
Next
child
End
If
Return
ctrl
End
Function
End
Class
dockLayoutHome_LoadDockLayout event. For the docks that I try to add on "runtime" (I have a RadAjaxPanel which contains the RadDockLayout) I get the following error:System.ApplicationException: A program is attempting to add a new Web Part Zone to this page. Web Part Zones must be defined at the time a Web Part Page is created.
Any help would be appreciated :)
public
class
CustomRadDock : RadDock
{
#region Overrides
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
this
.EnsureChildControls();
}
protected
override
void
CreateChildControls()
{
base
.CreateChildControls();
WebPartZone wpZone =
new
WebPartZone();
wpZone.ID = String.Format(
"{0}_webPartZone"
,
this
.ID);
wpZone.PartChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.TitleOnly;
this
.ContentContainer.Controls.Add(wpZone);
LoadWebPart(
"myname"
);
}
#endregion Overrides
#region Methods
private
void
LoadWebPart(String webPartName_)
{
_log.Info(
"Adding WebPart to dock"
);
using
(SPSite site =
new
SPSite(
"mysite"
))
{
SPWeb web = site.RootWeb;
SPFile page = web.GetFile(
"mypage"
);
web.AllowUnsafeUpdates =
true
;
web.Update();
using
(SPLimitedWebPartManager wpmgr = page.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared))
{
XmlElement p =
new
XmlDocument().CreateElement(
"p"
);
p.InnerText =
"Hello World"
;
ContentEditorWebPart cewp =
new
ContentEditorWebPart();
cewp.Content = p;
wpmgr.AddWebPart(cewp, String.Format(
"{0}_webPartZone"
,
this
.ID), 0);
wpmgr.SaveChanges(cewp);
}
web.AllowUnsafeUpdates =
false
;
web.Update();
}
}
#endregion Methods