I'm having a problem with the RadDatePicker when it is used inside a dynamically loaded user control. Also, the dynamically loaded user control is displayed inside a RadPageView.
The problem is this: I set the initial value for the RadDatePicker in server-side code when the user control is first created. The initial value displays correctly when the page is displayed. However, once a postback occurs the value is "lost" (i.e. the RadDatePicker is blank). If you type in a date or select a date using the calendar then the value is persisted across postbacks. It's only the initial value, set on the server side when the user control is created, that is not persisted across postbacks.
Here is some sample code. First, the user control:
WebUserControl.ascx
WebUserControl.ascx.cs
Default.aspx
Default.aspx.cs
The problem is this: I set the initial value for the RadDatePicker in server-side code when the user control is first created. The initial value displays correctly when the page is displayed. However, once a postback occurs the value is "lost" (i.e. the RadDatePicker is blank). If you type in a date or select a date using the calendar then the value is persisted across postbacks. It's only the initial value, set on the server side when the user control is created, that is not persisted across postbacks.
Here is some sample code. First, the user control:
WebUserControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %> |
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> |
<telerik:RadDatePicker ID="RadDatePicker1" runat="server"> |
</telerik:RadDatePicker> |
WebUserControl.ascx.cs
public partial class WebUserControl : System.Web.UI.UserControl |
{ |
public void DisplayInformation() |
{ |
RadDatePicker1.SelectedDate = DateTime.Now.Date; |
} |
} |
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> |
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> |
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %> |
<!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>Untitled Page</title> |
</head> |
<body> |
<form id="form1" runat="server"> |
<div> |
<asp:ScriptManager ID="ScriptManager1" runat="server"> |
</asp:ScriptManager> |
<telerik:RadMultiPage ID="RadMultiPage1" runat="server" OnPageViewCreated="RadMultiPage1_PageViewCreated"> |
</telerik:RadMultiPage> |
<asp:Button ID="Button2" runat="server" Text="Create Page View" OnClick="Button2_Click" /> |
<asp:Button ID="Button1" runat="server" Text="PostBack" /> |
</div> |
</form> |
</body> |
</html> |
Default.aspx.cs
public partial class _Default : System.Web.UI.Page |
{ |
bool DoDisplay = false; |
protected void Button2_Click(object sender, EventArgs e) |
{ |
// Display initial values the first time the user |
// control is created. |
DoDisplay = true; |
RadPageView pv = new RadPageView(); |
pv.ID = "RadPageView1"; |
RadMultiPage1.PageViews.Add(pv); |
} |
protected void RadMultiPage1_PageViewCreated(object sender, Telerik.Web.UI.RadMultiPageEventArgs e) |
{ |
WebUserControl wuc = Page.LoadControl("WebUserControl.ascx") as WebUserControl; |
wuc.ID = "WebUserControl1"; |
e.PageView.Selected = true; |
// Only display initial values the first time the |
// user control is created. On subsequent postbacks |
// we want the value from the viewstate. |
if (DoDisplay) |
wuc.DisplayInformation(); |
e.PageView.Controls.Add(wuc); |
} |
} |