Hi,
I am creating a page which is based on the example called Load on Demand RadPageView of the TabStrip in Telerik's examples app.
The code behind for the default page is:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { AddTab("Home"); AddPageView(DaveRadTabStrip.FindTabByText("Home")); AddTab("Apps"); AddTab("Contact"); } } private void AddTab(string tabName) { RadTab tab = new RadTab(); tab.Text = tabName; this.DaveRadTabStrip.Tabs.Add(tab); } protected void DaveRadMultiPage_PageViewCreated(object sender, RadMultiPageEventArgs e) { string userControlName = @"~/UserControls/" + e.PageView.ID + ".ascx"; Control userControl = Page.LoadControl(userControlName); userControl.ID = e.PageView.ID + "_userControl"; e.PageView.Controls.Add(userControl); } private void AddPageView(RadTab tab) { RadPageView pageView = new RadPageView(); pageView.ID = tab.Text; DaveRadMultiPage.PageViews.Add(pageView); tab.PageViewID = pageView.ID; } protected void DaveRadTabStrip_TabClick(object sender, RadTabStripEventArgs e) { AddPageView(e.Tab); e.Tab.PageView.Selected = true; } The apps user control (for the Apps tab) has a TabStrip on it. So, I have tabs inside of a tab.
There is a javascript function which is not working. On the tabs on the Apps user control, there are some hyperlinks which load a image into a "lightbox" using a jScript plugin called FancyBox. That plugin is not working. I recognise that Telerik makes no guarantee that its controls do not work with 3rd party controls (and fair enough). But I wanted a LightBox and Telerik does not have one (RadWindow comes close, but at the end of the day, that is not its purpose - and there's no elegant animation with RadWindow either).
Here is the markup for that user control:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Apps.ascx.cs" Inherits="UserControls_Apps" %><div id="contentOnPage"> <telerik:RadCodeBlock runat="server" ID="FancyBoxCode"> <script type="text/javascript" src='<%=Page.ResolveClientUrl("~/js/jquery.fancybox-1.3.1.js") %>'></script> <script type="text/javascript"> $(document).ready(function () { $("a.lib").fancybox({ 'transitionIdn': 'fade', 'transitionOut': 'fade' }); }); </script> </telerik:RadCodeBlock> <telerik:RadTabStrip ID="AppsRadTabStrip" MultiPageID="AppsRadMultiPage" SelectedIndex="0" ShowBaseLine="true" runat="server"> <Tabs> <telerik:RadTab Text="BookLender 2.0" PageViewID="BooklenderRadPageView2" /> <telerik:RadTab Text="ColorHexGrabber" PageViewID="ColorHexGrabberRadPageView" /> <telerik:RadTab Text="BookLender 1.0" PageViewID="BooklenderRadPageView1" /> </Tabs> </telerik:RadTabStrip><!-- no spaces between the tabstrip and multipage, in order to remove unnecessary whitespace --><telerik:RadMultiPage ID="AppsRadMultiPage" SelectedIndex="0" runat="server" CssClass="page"> <telerik:RadPageView ID="BooklenderRadPageView2" runat="server"> <div> <img src="./images/BookLender/book.png" alt="bookLender" /> <h3>Version 2.0</h3> <p>Have you ever lost your favourite book because you forgot who you lent it to (and they never returned it)? </p> <p>I designed and created bookLender to help people keep a record of the books which they lend, and to whom they lend those books.</p> <p>There is no cost to download and use it. There is only a 64 bit version of BookLender 2.0. So if your version of Windows is only 32 bit, version 1.0 is for you.</p> <p>I've also taken the opportunity to update it from the university-level app that it was, to a more sophisticated version. Unfortunately, there is no update path, as the underlying database design is completely different.</p> <p>bookLender has the following functions:</p> <ul class="features"> <li>view all books which are currently lent to your friends</li> <li>manage your home library -: <ul class="expanded"> <li>add books </li> <li>delete books </li> <li>view a book's history</li> </ul> </li> <li>record a book-lending </li> <li>record the return of a book</li> </ul> <p> <a class="lib" href="./images/BookLender/library.PNG">screen shot 1</a> | <a class="lib" href="./images/BookLender/lended.PNG">screen shot 2</a> | <a class="lib" href="./images/BookLender/history.PNG">screen shot 3</a> | <a class="lib" href="./images/BookLender/authorsOfBook.PNG">screen shot 4</a> | <a class="lib" href="./images/BookLender/manageUsers.PNG">screen shot 5</a> </p> <asp:Panel ID="DownloadPanel" GroupingText="Download Area" CssClass="downloadArea" runat="server"> <p><b>** Note ** </b> - you need to download and install the .NET Framework (v.4.0) to run bookLender 2.0. Think of it as C#'s version of the java runtime environment. You can find it at <a href="http://www.microsoft.com/downloads/en/default.aspx" > Microsoft's download center</a>. <p>You also need to download a copy of Microsoft's SQL Server Compact Database and install it (the 64 bit version). You can get those from the download centre referenced above.</p> <ul class="downloads"> <li><a href="./msi/BookLender2.0Setup.msi" >click here (698KB)</a> to download bookLender itself! (64 bit OS only)</li> </ul> </asp:Panel> </div> </telerik:RadPageView> <telerik:RadPageView ID="BooklenderRadPageView1" runat="server"> <div> <img src="images/BookLender/book.png" alt="bookLender" /> <h3>Version 1.0</h3> <p>Have you ever lost your favourite book because you forgot who you lent it to (and they never returned it)? </p> <p>I designed and created bookLender to help people keep a record of the books which they lend, and to whom they lend those books.</p> <p>There is no cost to download and use it.</p> <p>bookLender has the following functions:</p> <ul class="features"> <li>view all books which are currently lent to your friends</li> <li>manage your home library -: <ul class="expanded"> <li>add books </li> <li>delete books </li> <li>view a book's history</li> </ul> </li> <li>record a book-lending </li> <li>record the return of a book</li> </ul> <p> <a class="lib" href="./images/BookLender/bl1.png">screen shot 1</a> | <a class="lib" href="./images/BookLender/bl2.png">screen shot 2</a> </p> <asp:Panel ID="DownloadPanelBL1" GroupingText="Download Area" CssClass="downloadArea" runat="server"> <p><b>** XP Users Note ** </b> - you need to download and install the .NET Framework (v.3.5) to run bookLender. Think of it as C#'s version of the java runtime environment. You can find it at <a href="http://www.microsoft.com/downloads/en/default.aspx" > Microsoft's download center</a>. (<b>Vista/Windows 7 users</b> do not need to do this.)</p> <p><b>** All users **</b> - you need to download a copy of Microsoft's SQL Server Compact Database and install it. 64 bit users need the 64 bit version and 32 bit users need the 32 bit version. You can get those from the download centre referenced above.</p> <ul class="downloads"> <li><a href="./msi/bookLender1.0Setup.msi" >click here (698KB)</a> to download bookLender itself!</li> </ul> </asp:Panel> </div> </telerik:RadPageView> <telerik:RadPageView ID="ColorHexGrabberRadPageView" runat="server"> <div> <img src="./images/ColorHexGrabber/hexLogo.png" alt="colorHexGrabber" /> <p>Being someone who uses CSS quite a bit, I wanted a quick and easy way of picking a colour and generating its respective hexadecimal number.</p> <p>Previously, I used to load up a full-scale photo editing suite (such as <a href="http://www.gimp.org/">GIMP</a>). Great as GIMP is, it was using a lighthouse to do the job of a single match.</p> <p>Rather than hunt around amongst the many and varied colour-choosing applications around, I decided to make my own. The charter which I set myself was that this application had to have absolutely bare functionality. That functionality being, to be able to:</p> <ul class = "features"> <li>pick a colour from a colour palette and extract its hexadecimal value; and</li> <li>pick a colour from a loaded image and extract its hexadecimal value.</li> </ul> <p> <a class="lib" href="./images/ColorHexGrabber/chg1.png">screen shot 1</a> | <a class="lib" href="./images/ColorHexGrabber/chg2.jpg">screen shot 2</a> </p> <asp:Panel ID="DownloadPanelCHG" GroupingText="Download Area" CssClass="downloadArea" runat="server"> <b>** XP Users Note **</b> - you need to download and install the .NET Framework (v.3.5) to run colorHexGrabber. Think of it as C#'s version of the java runtime environment. You can find it at <a href="http://www.microsoft.com/downloads/en/default.aspx" > Microsoft's download center</a>. (<b>Vista/Windows 7 users</b> do not need to do this.) <ul class="downloads"> <li><a href="./msi/colorHexGrabberSetup.msi">click here (326KB)</a> to download colorHexGrabber itself!</li> </ul> </asp:Panel> </div> <!-- close colorHexGrabber --> </telerik:RadPageView> </telerik:RadMultiPage></div> I really want to get to the bottom of this, to develop a better understanding of working with tabs, and AJAX and javascript and how they can all play well together. I need this skill for my job, where I develop enterprise apps using these tools. I'm happy to provide the whole VS solution if that helps (it is not that big, as I am just using it to learn concepts).
Thanks
Edit - further info. I have found that Fancybox will work without AJAX on the tabs. When I add the following AJAX, the FancyBox does not work:
<telerik:RadAjaxManagerProxy ID="DaveRadAjaxManagerProxy" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="DaveRadTabStrip"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="DaveRadTabStrip" LoadingPanelID="DarRadAjaxLoadingPanel" /> <telerik:AjaxUpdatedControl ControlID="DaveRadMultiPage" LoadingPanelID="DarRadAjaxLoadingPanel" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings></telerik:RadAjaxManagerProxy>
protected void gvApprovals_PageIndexChanged(object source, Telerik.Web.UI.GridPageChangedEventArgs e) { user.Options.ApprovalGrid.CurrentPage.Value = e.NewPageIndex; }var oWnd = null;var modalparent = true;if (!modalparent) { // open modal popup inside oWnd = radopen(url);}else { // open modal popup on parent window oWnd = window.parent.radopen(url);} // set height, widthoWnd.SetHeight(iHeight); // it doesn't work whenopen modal popup on parent window
oWnd.SetWidth(iWidth);<
telerik:GridTemplateColumn HeaderText = "Print Letters/Post Cards" UniqueName = "PrintLetter" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign
<ItemTemplate
<telerik:RadComboBox ID= "Print" runat
<Items
<telerik:RadComboBoxItem runat="server" Text
<telerik:RadComboBoxItem runat="server" Text
<telerik:RadComboBoxItem runat="server" Text
<telerik:RadComboBoxItem runat="server" Text
</Items
</telerik:RadComboBox
</ItemTemplate
</
telerik:GridTemplateColumn
protected void ItemDataBound(object sender, GridItemEventArgs
{
GridDataItem dataItem = e.Item as GridDataItem
RadComboBox Print = ((RadComboBox)dataItem["PrintLetter"].FindControl("Print"
Print.Text =
"1year"
}
<asp:Panel ID="pnlNewsAdmin" runat="server"> <telerik:RadAjaxPanel ID="radAjaxPanel_MLONewsAdmin" runat="server" LoadingPanelID="radAjaxLoadingPanel_MLONewsAdmin"> <telerik:RadAjaxLoadingPanel ID="radAjaxLoadingPanel_MLONewsAdmin" runat="server" /> <telerik:RadGrid ID="rgNewsAdmin" runat="server" HeaderStyle-Font-Size="Smaller" ItemStyle-Font-Size="Smaller" AllowMultiRowSelection="false" AlternatingItemStyle-Font-Size="Smaller" AllowPaging="true" PageSize="10" AllowSorting="true" AllowFilteringByColumn="false" AutoGenerateColumns="false" GridLines="None" Skin="Default" ItemStyle-BackColor="#ddeeff" AlternatingItemStyle-BackColor="White" HeaderStyle-BackColor="AliceBlue" HeaderStyle-CssClass="BACGridHeader" OnNeedDataSource="rgNewsAdmin_OnNeedDataSource" OnInsertCommand="rgNewsAdmin_OnInsertCommand" OnUpdateCommand="rgNewsAdmin_OnUpdateCommand" OnDeleteCommand="rgNewsAdmin_OnDeleteCommand" OnItemCommand="rgNewsAdmin_OnItemCommand"> <PagerStyle Mode="NumericPages" /> <MasterTableView ShowHeadersWhenNoRecords="true" DataKeyNames="ManageNewsID" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"> <CommandItemSettings AddNewRecordText="Add News Item..." /> <Columns> <telerik:GridBoundColumn DataField="ManageNewsID" Visible="false" /> <telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description" /> <telerik:GridBoundColumn DataField="URL" HeaderText="URL" SortExpression="URL" /> <telerik:GridTemplateColumn HeaderText="Start Date" SortExpression="StartDate"> <ItemTemplate> <%# (DataBinder.Eval(Container,"DataItem.StartDate") != null ? DateTime.Parse(DataBinder.Eval(Container,"DataItem.StartDate").ToString()).ToShortDateString() : "") %> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Expire Date" SortExpression="ExpireDate"> <ItemTemplate> <%# (DataBinder.Eval(Container,"DataItem.ExpireDate") != null ? DateTime.Parse(DataBinder.Eval(Container,"DataItem.ExpireDate").ToString()).ToShortDateString() : "") %> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="SelectedRoleDescriptions" HeaderText="Roles" SortExpression="SelectedRoleDescriptions" ItemStyle-Width="275px" /> <telerik:GridEditCommandColumn ButtonType="ImageButton" EditImageUrl="edit.gif" UniqueName="EditColumn" EditText="Edit News Item" /> <telerik:GridButtonColumn ConfirmText="Delete News Item?" UniqueName="DeleteColumn" Text="Delete News Item" ConfirmTitle="Delete" ConfirmDialogType="RadWindow" CommandName="Delete" ButtonType="ImageButton" ImageUrl="delete.gif" /> </Columns> <EditFormSettings EditColumn-ButtonType="ImageButton" EditColumn-UniqueName="EditColumn" UserControlName="~/EditItem.ascx" EditFormType="WebUserControl" /> </MasterTableView> </telerik:RadGrid> </telerik:RadAjaxPanel> </asp:Panel><telerik:RadScriptBlock ID="radScriptBlock_EditMLONewsItem" runat="server"> <script type="text/javascript"> String.prototype.trim = function() { return this.replace(/^\s\s*/,'').replace(/\s\s*$/,''); } function CanSave() { var errorMsg = ""; var txtDescription = $get("<%= txtDescription.ClientID %>"); var txtURL = $get("<%= txtURL.ClientID %>"); var rdpStartDate = $find("<%= rdpStartDate.ClientID %>"); var rdpExpireDate = $find("<%= rdpExpireDate.ClientID %>"); var description = txtDescription.value.trim(); var url = txtURL.value.trim(); var startDate = rdpStartDate.get_selectedDate(); var expireDate = rdpExpireDate.get_selectedDate(); if (description.length == 0) { errorMsg = "Description\n"; } if (url.length == 0) { errorMsg = errorMsg + "URL\n"; } if (startDate == null) { errorMsg = errorMsg + "Start Date\n"; } if (expireDate == null) { errorMsg = errorMsg + "Expire Date\n"; } if ((startDate != null) && (expireDate != null)) { if (startDate > expireDate) { errorMsg = errorMsg + "Start Date must occur before Expire Date.\n"; } } try { if (!HasRolesSelected()) { errorMsg = errorMsg + "At least one User Role must be selected.\n"; } } catch(e) {} if (errorMsg.length > 0) { alert("The following items must be completed in order to save this News Item:\n" + errorMsg); return false; } return true; } </script> </telerik:RadScriptBlock> <table> <tr> <td valign="top" width="425px"> <table> <tr> <td> <asp:Label ID="lblDescription" runat="server" Text="Description" /> </td> <td> <asp:TextBox ID="txtDescription" runat="server" MaxLength="255" Width="300px" Text='<%# ((DataBinder.Eval(Container,"DataItem.Description").ToString() != "") ? DataBinder.Eval(Container,"DataItem.Description") : "") %>' /> </td> </tr> <tr> <td> <asp:Label ID="lblURL" runat="server" Text="URL" /> </td> <td> <asp:TextBox ID="txtURL" runat="server" MaxLength="255" Width="300px" Text='<%# ((DataBinder.Eval(Container,"DataItem.URL").ToString() != "") ? DataBinder.Eval(Container, "DataItem.URL") : "") %>' /> </td> </tr> <tr> <td> <asp:Label ID="lblStartDate" runat="server" Text="Start Date" /> </td> <td> <telerik:RadDatePicker ID="rdpStartDate" runat="server" /> </td> </tr> <tr> <td> <asp:Label ID="lblExpireDate" runat="server" Text="Expire Date" /> </td> <td> <telerik:RadDatePicker ID="rdpExpireDate" runat="server" /> </td> </tr> </table> </td> <td> <table> <tr> <td valign="top"> <asp:Label ID="lblRoles" runat="server" Text="Roles" /> </td> <td> <RoleSelector:roleSelector ID="roleSelector" runat="server" /> </td> </tr> </table> </td> </tr> </table> <div style="padding-top: 10px;"> <asp:Button ID="btnInsert" runat="server" Text="Save" CommandName="PerformInsert" OnClientClick="if(CanSave())return true;" Visible='<%# (DataBinder.Eval(Container,"DataItem.ManageNewsID").ToString() != "" ? false : true) %>' /> <asp:Button ID="btnUpdate" runat="server" Text="Save" CommandName="Update" OnClientClick="if (CanSave()) return true;" Visible='<%# (DataBinder.Eval(Container,"DataItem.ManageNewsID").ToString() != "" ? true : false) %>' /> <asp:Button ID="btnCancel" runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="false" /> </div>