I have setup an ajax masterpage which has a skinmanager and a radformdecorator on it.
I only have one aspx page which dynamically loads in user controls into the content placeholder based on the tab selected.
Below are two questions I am currently stuck on if anyone can help me.
MyAccount.ascx html
MyAccount.ascx code behind:
Any help would be greatly appreciated.
Thank you.
I only have one aspx page which dynamically loads in user controls into the content placeholder based on the tab selected.
Below are two questions I am currently stuck on if anyone can help me.
- Inside MyAccount.ascx I have a combo box which allows the user to select a skin to use which is working fine for the skin manager, but I keep receiving an error when trying to hook up the radformdecorator.
- Inside Header.ascx I am dynamically adding the following tabs 'home' and 'contact us' on the first page load and not on any postback. This stops the tabs from repeating everytime the page is posted back. However depending on who logs in, i need to add another two tabs to the radtabstrip, 'My Account' if a user logs in and 'Admin' if an admin logs in. Also they need to be removed when they log out. Can this be done?
Master Page HTML:
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> <%@ Register TagPrefix="UC" TagName="Header" Src="~/Header.ascx" %> <!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> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="ScriptManager" runat="server" /> <telerik:RadSkinManager runat="server" ID="RadSkinManager" Enabled="true" ></telerik:RadSkinManager> <telerik:RadAjaxManager ID="RadAjaxManager" runat="server" /> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" MinDisplayTime="1000" Skin="Vista" IsSticky="true"> <asp:Image ID="Image1" runat="server" ImageUrl="~/loading.gif" AlternateText="Loading.." /></telerik:RadAjaxLoadingPanel> <telerik:RadFormDecorator runat="server" ID="RadFormDecorator" EnableAjaxSkinRendering="true" DecoratedControls="All" Enabled="true" /> <div> <UC:Header ID="Header" runat="server" /> <br /> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body> </html>Header.ascx HTML:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Header.ascx.vb" Inherits="Header" %> <asp:Panel runat="server" ID="PanelHeader"> <table> <tr> <td> <telerik:RadTabStrip ID="HeaderTabStrip" runat="server" SelectedIndex="0" EnableAjaxSkinRendering="true"></telerik:RadTabStrip> </td> </tr> </table> </asp:Panel> <script type="text/javascript"> // the code below will allow the tab to be reselected Telerik.Web.UI.RadTab.prototype.select = function (e) { var parent = this.get_parent(); if (!parent) { this._cachedSelected = true; return true; } var shouldNavigate = this._shouldNavigate(); var selectedTab = parent.get_selectedTab(); var tabStrip = this.get_tabStrip(); //these lines are commented so the tabstrip postbacks even if you click on the selected tab // if (!shouldNavigate && selectedTab == this && !tabStrip.get_clickSelectedTab()) // return false; if (tabStrip._raiseCancelEvent("tabSelecting", this, e)) return false; var suppressVisualUpdate = this._shouldPostBack() || (shouldNavigate && (!this.get_target() || this.get_target() == "_self")); if (!e) suppressVisualUpdate = false; if (selectedTab && selectedTab != this) selectedTab.unselect(suppressVisualUpdate, e); parent._setSelectedIndex(this.get_index()); tabStrip._registerSelectedTab(this); if (!suppressVisualUpdate) { this._updateAppearance(true); this._updateSiblings(true); this._setChildListDisplay(""); if (this._scroller) { this._scroller._showArrows(); } else { tabStrip._scrollInitInProgress = true; this._initScrolling(); tabStrip._scrollInitInProgress = false; } if (tabStrip._reorderTabsOnSelect) Telerik.Web.UI.RadTabStrip._reorderTabs(parent.get_childListElement(), this.get_element()); } if (tabStrip.get_multiPage()) this._selectPageView(suppressVisualUpdate); tabStrip._raiseEvent("tabSelected", this, e); return true; } </script>Header.ascx Code behind:
Imports Telerik.Web.UI Partial Class Header Inherits System.Web.UI.UserControl Protected Sub HeaderTabStrip_TabClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadTabStripEventArgs) Handles HeaderTabStrip.TabClick Dim ctrlID As String = Nothing Select Case e.Tab.Value Case 0 ctrlID = "Home.ascx" Exit Select Case 1 ctrlID = "MyAccount.ascx" Exit Select Case 2 ctrlID = "Admin.ascx" Exit Select Case 3 ctrlID = "ContactUs.ascx" Exit Select End Select If TypeOf (Page) Is BasePage Then Dim CPage As BasePage = CType(Page, BasePage) Dim PanelContent As Panel = DirectCast(CPage.Content("ContentPlaceHolder1").FindControl("PanelContent"), Panel) If (PanelContent IsNot Nothing) Then CPage.LoadUserControl(ctrlID, PanelContent) Else ' load an error message here End If End If End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If (Not Page.IsPostBack) Then ' make these tabs DB driven based on user role! ' I want My Account and Admin tabs to only appear if user is logged in and based on their role. AddTab("Home", 0, True) AddTab("My Account", 1, True) AddTab("Admin", 2, True) AddTab("Contact Us", 3, True) End If Dim AjaxManager As RadAjaxManager = RadAjaxManager.GetCurrent(Page) Dim panel As Panel = DirectCast(Me.Page.Master.FindControl("ContentPlaceHolder1").FindControl("PanelContent"), Panel) If (panel IsNot Nothing) Then AjaxManager.AjaxSettings.AddAjaxSetting(HeaderTabStrip, panel) End If AjaxManager.AjaxSettings.AddAjaxSetting(HeaderTabStrip, PanelHeader) End Sub ' adds the tab to the tab strip Private Sub AddTab(ByVal ID As String, ByVal val As Integer, ByVal bVisible As Boolean) Dim tab As RadTab = New RadTab() tab.Value = val tab.Text = ID.Replace(" ", "") tab.Visible = bVisible HeaderTabStrip.Tabs.Add(tab) End Sub End Class MyAccount.ascx html
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="MyAccount.ascx.vb" Inherits="MyAccount" %> My Account UC<br /><br /> Skin: <telerik:RadComboBox ID="DDLSkinChooser" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DDLSkinChooser_SelectedIndexChanged" EnableAjaxSkinRendering="true" > <Items> <telerik:RadComboBoxItem runat="server" Text="WebBlue" Value="WebBlue" /> <telerik:RadComboBoxItem runat="server" Text="Vista" Value="Vista" /> <telerik:RadComboBoxItem runat="server" Text="Black" Value="Black" /> <telerik:RadComboBoxItem runat="server" Text="Outlook" Value="Outlook" /> <telerik:RadComboBoxItem runat="server" Text="Hay" Value="Hay" /> </Items> </telerik:RadComboBox><br /><br /> <asp:Button runat="server" ID="btnTest" Text="My Test" />MyAccount.ascx code behind:
Imports Telerik.Web.UI Partial Class MyAccount Inherits System.Web.UI.UserControl Protected Sub DDLSkinChooser_SelectedIndexChanged(ByVal o As Object, ByVal e As Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs) Handles DDLSkinChooser.SelectedIndexChanged RadSkinManager.GetCurrent(Page).Skin = e.Text Dim RadFormDecorator As RadFormDecorator = DirectCast(Page.Master.FindControl("RadFormDecorator"), RadFormDecorator) If (RadFormDecorator IsNot Nothing) Then RadFormDecorator.Skin = e.Text RadFormDecorator.EnableAjaxSkinRendering = True End If DDLSkinChooser.EnableAjaxSkinRendering = True Dim radtab As RadTabStrip = CType(Me.Page.Master.FindControl("Header").FindControl("HeaderTabStrip"), RadTabStrip) If (radtab IsNot Nothing) Then radtab.EnableAjaxSkinRendering = True End If End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim AjaxManager As RadAjaxManager = RadAjaxManager.GetCurrent(Page) Dim panel As Panel = CType(Me.Page.Master.FindControl("ContentPlaceHolder1").FindControl("PanelContent"), Panel) If (panel IsNot Nothing) Then AjaxManager.AjaxSettings.AddAjaxSetting(DDLSkinChooser, panel) End If ' Adding this in for radformdecorator produces an error 'Dim RadFormDecorator As RadFormDecorator = DirectCast(Page.Master.FindControl("RadFormDecorator"), RadFormDecorator) 'If (RadFormDecorator IsNot Nothing) Then 'AjaxManager.AjaxSettings.AddAjaxSetting(DDLSkinChooser, RadFormDecorator) 'End If Dim PanelHeader As Panel = CType(Me.Page.Master.FindControl("Header").FindControl("PanelHeader"), Panel) If (PanelHeader IsNot Nothing) Then AjaxManager.AjaxSettings.AddAjaxSetting(DDLSkinChooser, PanelHeader) End If End Sub End Class Any help would be greatly appreciated.
Thank you.