I am trying to use the logic from the demo project listed here (http://demos.telerik.com/aspnet-ajax/tabstrip/examples/multipage/dynamic-pageview-creation/defaultvb.aspx), but It's not working as expected.
First, the onTabSelecting javascript is not finding previous pageViewId's and it keeps posting back.
Second, the code "e.Tab.PageView.Selected = True" in the TabClick event in the codebehind is throwing an error, "Object reference not set to an instance of an object." Upon inspection, e.Tab is showing it is a valid RadTab, but the PageView is Nothing.
I looked at everything, and it all looks correct. I have some logic to dynamically create the tabs and load the ascx into pageviews based upon a saved path in the database. The default.aspx uses a nested master, with the AjaxManager in the child master. It's setup like this:
Site.Master ---> Child.Master ---> Default.aspx
Here is the Default.aspx page.
Here is the VB code.
First, the onTabSelecting javascript is not finding previous pageViewId's and it keeps posting back.
Second, the code "e.Tab.PageView.Selected = True" in the TabClick event in the codebehind is throwing an error, "Object reference not set to an instance of an object." Upon inspection, e.Tab is showing it is a valid RadTab, but the PageView is Nothing.
I looked at everything, and it all looks correct. I have some logic to dynamically create the tabs and load the ascx into pageviews based upon a saved path in the database. The default.aspx uses a nested master, with the AjaxManager in the child master. It's setup like this:
Site.Master ---> Child.Master ---> Default.aspx
Here is the Default.aspx page.
<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Child.Master" AutoEventWireup="true" CodeBehind="Default.aspx.vb" Inherits="MainApp._Default" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<
asp:Content
runat
=
"server"
ID
=
"LeftNav"
ContentPlaceHolderID
=
"ChildContentLeftPanel"
>
<
telerik:RadCalendar
ID
=
"RadCalendar1"
runat
=
"server"
Skin
=
"Forest"
>
<
WeekendDayStyle
CssClass
=
"rcWeekend"
/>
<
CalendarTableStyle
CssClass
=
"rcMainTable"
/>
<
OtherMonthDayStyle
CssClass
=
"rcOtherMonth"
/>
<
OutOfRangeDayStyle
CssClass
=
"rcOutOfRange"
/>
<
DisabledDayStyle
CssClass
=
"rcDisabled"
/>
<
SelectedDayStyle
CssClass
=
"rcSelected"
/>
<
DayOverStyle
CssClass
=
"rcHover"
/>
<
FastNavigationStyle
CssClass
=
"RadCalendarMonthView RadCalendarMonthView_Forest"
/>
<
ViewSelectorStyle
CssClass
=
"rcViewSel"
/>
</
telerik:RadCalendar
>
</
asp:Content
>
<
asp:Content
runat
=
"server"
ID
=
"NavigationContent"
ContentPlaceHolderID
=
"ChildContent1"
>
<
telerik:RadAjaxLoadingPanel
runat
=
"server"
ID
=
"LoadingPanel1"
Skin
=
"Forest"
/>
<
telerik:RadAjaxManagerProxy
ID
=
"RadAjaxManagerProxy1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"NavTabStrip"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"NavTabStrip"
></
telerik:AjaxUpdatedControl
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadMultiPage1"
LoadingPanelID
=
"LoadingPanel1"
></
telerik:AjaxUpdatedControl
>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadMultiPage1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadMultiPage1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManagerProxy
>
<
script
type
=
"text/javascript"
>
function onTabSelecting(sender, args) {
if (args.get_tab().get_pageViewID()) {
args.get_tab().set_postBack(false);
}
}
</
script
>
<
div
class
=
"exampleWrapper"
>
<
telerik:RadTabStrip
ID
=
"NavTabStrip"
runat
=
"server"
SelectedIndex
=
"0"
MultiPageID
=
"RadMultipPage1"
Skin
=
"Forest"
Align
=
"Justify"
OnTabClick
=
"NavTabStrip_TabClick"
OnClientTabSelecting
=
"onTabSelecting"
/>
<
telerik:RadMultiPage
ID
=
"RadMultiPage1"
runat
=
"server"
SelectedIndex
=
"0"
OnPageViewCreated
=
"RadMultiPage1_PageViewCreated"
/>
</
div
>
</
asp:Content
>
<
asp:Content
runat
=
"server"
ID
=
"BodyContent"
ContentPlaceHolderID
=
"ChildContent2"
>
</
asp:Content
>
Here is the VB code.
Imports
System
Imports
Telerik.Web.UI
Partial
Public
Class
_Default
Inherits
System.Web.UI.Page
Protected
Sub
Page_Load(
ByVal
sender
As
Object
,
ByVal
e
As
EventArgs)
Handles
Me
.Load
If
Not
Page.IsPostBack
Then
SetStoreID(Page.Master)
Dim
dal
As
Navigation =
New
Navigation
Dim
ds
As
DataSet = dal.NavigationSelect(0)
Dim
bAddPageView
As
Boolean
=
True
Dim
sObjectPath
As
String
=
String
.Empty
For
Each
row
As
DataRow
In
ds.Tables(0).Rows
If
IsDBNull(row.Item(
"ObjectPath"
))
Then
sObjectPath =
String
.Empty
Else
sObjectPath = row.Item(
"ObjectPath"
)
End
If
AddTab(row.Item(
"NavName"
), sObjectPath, bAddPageView)
bAddPageView =
False
Next
End
If
End
Sub
Private
Sub
SetStoreID(
ByVal
sender
As
Object
)
Dim
sStoreID
As
String
Dim
DAL
As
Store =
New
Store
sStoreID = DAL.StoreCurrentStoreIDSelect
Dim
StoreID
As
HiddenField = FindControlRecursive(sender,
"StoreID"
)
StoreID.Value = sStoreID
End
Sub
Private
Sub
AddTab(
ByVal
tabName
As
String
,
ByVal
ObjectPath
As
String
,
ByVal
bAddPageView
As
Boolean
)
Dim
tab
As
RadTab =
New
RadTab
tab.Text = tabName
tab.Attributes.Add(
"ObjectPath"
, ObjectPath)
NavTabStrip.Tabs.Add(tab)
If
bAddPageView
Then
AddPageView(tab)
End
If
End
Sub
Protected
Sub
RadMultiPage1_PageViewCreated(
ByVal
sender
As
Object
,
ByVal
e
As
RadMultiPageEventArgs)
Handles
RadMultiPage1.PageViewCreated
Dim
tab
As
RadTab = NavTabStrip.SelectedTab
Dim
userControlName
As
String
= tab.Attributes(
"ObjectPath"
)
Dim
userControl
As
Control = Page.LoadControl(userControlName)
userControl.ID = e.PageView.ID &
"_userControl"
e.PageView.Controls.Add(userControl)
End
Sub
Private
Sub
AddPageView(
ByVal
tab
As
RadTab)
Dim
pageView
As
RadPageView =
New
RadPageView
pageView.ID = tab.Text
RadMultiPage1.PageViews.Add(pageView)
tab.PageViewID = pageView.ID
pageView.Selected =
True
End
Sub
Protected
Sub
NavTabStrip_TabClick(
ByVal
sender
As
Object
,
ByVal
e
As
RadTabStripEventArgs)
Handles
NavTabStrip.TabClick
'Dim pageView As RadPageView = RadMultiPage1.FindControl(e.Tab.Text.Replace(" ", ""))
'If IsNothing(pageView) Then
AddPageView(e.Tab)
'End If
e.Tab.PageView.Selected =
True
End
Sub
Private
Shared
Function
FindControlRecursive(Root
As
Control, Id
As
String
)
As
Control
If
Root.ID = Id
Then
Return
Root
End
If
For
Each
Ctl
As
Control
In
Root.Controls
Dim
FoundCtl
As
Control = FindControlRecursive(Ctl, Id)
If
FoundCtl IsNot
Nothing
Then
Return
FoundCtl
End
If
Next
Return
Nothing
End
Function
End
Class