Hi,
This seems like a bug to me. I'm trying to persist the state of my RadPanelBar using PersistStateInCookie, which works fine if I'm only updating the RadPanelBar by itself. However, if I try to update the RadPanelBar via another control on the page, like the click event in code-behind of a button, it doesn't work.
I understand from doing a little research that the cookie resets the state of the RadPanelBar in (or possibly just before) the PreRender event of the RadPanelBar control. This means that it will always overwrite the selection of a RadPanelItem by another control on the page.
Here is an example of what I'm talking about:
Default.aspx
Default.aspx.cs
Default2.aspx
If you select an item in the RadPanelBar, then click on the link to Go to Default2.aspx, then go back to the Default.aspx page you will see that the state has been maintained. However, if you click the button to select the "RadTabStrip" item in the RadPanelBar you will see that it does not work.
If you change PersistStateInCookie to False, clicking on the button does work, but obviously the the state is not maintained.
I'm sure there is a workaround for this, but it seems to me that it breaks the coding convention of the Page event lifecycle.
Any thoughts?
James Steward
This seems like a bug to me. I'm trying to persist the state of my RadPanelBar using PersistStateInCookie, which works fine if I'm only updating the RadPanelBar by itself. However, if I try to update the RadPanelBar via another control on the page, like the click event in code-behind of a button, it doesn't work.
I understand from doing a little research that the cookie resets the state of the RadPanelBar in (or possibly just before) the PreRender event of the RadPanelBar control. This means that it will always overwrite the selection of a RadPanelItem by another control on the page.
Here is an example of what I'm talking about:
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 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> |
<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" /> |
</Scripts> |
</telerik:RadScriptManager> |
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" DefaultLoadingPanelID="LoadingPanel1"> |
<AjaxSettings> |
<telerik:AjaxSetting AjaxControlID="dCurrentPage"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="dCurrentPage" /> |
<telerik:AjaxUpdatedControl ControlID="btnSelectPanel" /> |
<telerik:AjaxUpdatedControl ControlID="RadPanelBar1" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
<telerik:AjaxSetting AjaxControlID="RadPanelBar1"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="dCurrentPage" /> |
<telerik:AjaxUpdatedControl ControlID="RadPanelBar1" /> |
<telerik:AjaxUpdatedControl ControlID="btnSelectPanel" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
</AjaxSettings> |
</telerik:RadAjaxManager> |
<telerik:RadAjaxLoadingPanel ID="LoadingPanel1" runat="server" Transparency="30" |
BackColor="#E0E0E0"> |
<img src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>' |
alt="Loading..." style="border: 0;" /> |
</telerik:RadAjaxLoadingPanel> |
<div style="float: left; margin-bottom: 10px; width: 270px"> |
<telerik:RadPanelBar runat="server" ID="RadPanelBar1" PersistStateInCookie="True" |
OnPreRender="RadPanelBar1_PreRender"> |
<Items> |
<telerik:RadPanelItem Text="ASP.NET controls" Expanded="true"> |
<Items> |
<telerik:RadPanelItem NavigateUrl="Default.aspx?page=menu" Text="RadMenu"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem NavigateUrl="Default.aspx?page=combobox" Text="RadComboBox"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem NavigateUrl="Default.aspx?page=panelbar" Text="RadPanelBar"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem NavigateUrl="Default.aspx?page=treeview" Text="RadTreeView"> |
</telerik:RadPanelItem> |
</Items> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem Text="WinForms controls"> |
<Items> |
<telerik:RadPanelItem Text="RadMenustrip" NavigateUrl="Default.aspx?page=menustrip"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem Text="RadTabStrip" NavigateUrl="Default.aspx?page=tabstrip"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem Text="RadToolStrip" NavigateUrl="Default.aspx?page=toolbarstrip"> |
</telerik:RadPanelItem> |
</Items> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem Text="Other projects"> |
<Items> |
<telerik:RadPanelItem Text="SiteFinity" NavigateUrl="Default.aspx?page=sitefinity"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem Text="Reporting" NavigateUrl="Default.aspx?page=reporting"> |
</telerik:RadPanelItem> |
<telerik:RadPanelItem Text="RadAjax" NavigateUrl="Default.aspx?page=ajax"> |
</telerik:RadPanelItem> |
</Items> |
</telerik:RadPanelItem> |
</Items> |
</telerik:RadPanelBar> |
</div> |
<div class="smallModule" id="dCurrentPage" runat="server"> |
<div class="rc1"> |
<div class="rc2"> |
<div class="rc3"> |
<strong>Current page:</strong> |
<p style="padding: 5px 10px"> |
<asp:Literal runat="server" ID="Label1"></asp:Literal></p> |
</div> |
</div> |
</div> |
</div> |
<br /> |
<div style="display:block"> |
<asp:Button ID="btnSelectPanel" runat="server" Text="Select RadTabStrip" OnClick="btnSelectPanel_Click" /><br /> |
<a href="Default2.aspx">Go to Default2.aspx</a> |
</div> |
</form> |
</body> |
</html> |
Default.aspx.cs
using System; |
using System.Web; |
using System.Web.UI; |
using System.Web.UI.WebControls; |
using System.Data; |
using System.Configuration; |
using System.Web.Security; |
using System.Web.UI.WebControls.WebParts; |
using System.Web.UI.HtmlControls; |
using Telerik.Web.UI; |
public partial class Default : System.Web.UI.Page |
{ |
protected void Page_Load(object sender, EventArgs e) |
{ |
Response.Cache.SetCacheability(HttpCacheability.NoCache); |
} |
protected void RadPanelBar1_PreRender(object sender, EventArgs e) |
{ |
RadPanelItem selectedItem = RadPanelBar1.SelectedItem; |
if (selectedItem != null) |
{ |
Label1.Text = String.Format("This is the {0} page", selectedItem.Text); |
} |
} |
protected void btnSelectPanel_Click(object sender, EventArgs e) |
{ |
RadPanelItem item = RadPanelBar1.FindItemByText("RadTabStrip"); |
RadPanelItem owner = item.Owner as RadPanelItem; |
owner.Expanded = true; |
item.Selected = true; |
} |
} |
Default2.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> |
<!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> |
</head> |
<body> |
<form id="form1" runat="server"> |
<div> |
This is another page.<br /> |
<a href="Default.aspx">Go back to Default.aspx</a> |
</div> |
</form> |
</body> |
</html> |
If you select an item in the RadPanelBar, then click on the link to Go to Default2.aspx, then go back to the Default.aspx page you will see that the state has been maintained. However, if you click the button to select the "RadTabStrip" item in the RadPanelBar you will see that it does not work.
If you change PersistStateInCookie to False, clicking on the button does work, but obviously the the state is not maintained.
I'm sure there is a workaround for this, but it seems to me that it breaks the coding convention of the Page event lifecycle.
Any thoughts?
James Steward