I have a master page which contains a RadAjaxManager
and a RadScriptManager. My child page contains a RadScheduler which I'm
trying to ajaxify. Basically, when the user clicks on a day, I want to
schedule the appointment with no input from the user and then show that
appointment on the scheduler with no refresh. The appointment doesn't
show up without a refresh, though, even though I can see the data source is
updated.
(All Q307 Promotheus controls, by the way.)
I'm programmatically finding the RadAjaxManager in the page load of the child
page and loading the
setting by using the AddAjaxSetting method. If I don't use a master page
and set the Ajax Settings during design time, it works.
I put together this simple form to show the problem. Here is the
code-behind:
public partial class SchedulerTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
RadAjaxManager RadAjaxManager1 = (RadAjaxManager)this.Page.Master.FindControl("RadAjaxManager1");
RadAjaxManager1.AjaxSettings.AddAjaxSetting(RadAjaxManager1, this.RadScheduler1);
RadAjaxManager1.AjaxSettings.AddAjaxSetting(RadAjaxManager1, RadAjaxManager1);
RadAjaxManager1.AjaxSettings.AddAjaxSetting(RadScheduler1, RadScheduler1);
RadAjaxManager1.AjaxRequest += new RadAjaxControl.AjaxRequestDelegate(this.RadAjaxManager1_CustomAjaxRequest);
if (!IsPostBack)
{
this.RadScheduler1.DataSource = LoadAppointments();
RadScheduler1.DataKeyField = "id";
RadScheduler1.DataEndField = "end";
RadScheduler1.DataStartField = "start";
RadScheduler1.DataSubjectField = "subject";
RadScheduler1.DataBind();
}
}
List<SchedulerApptInfo> LoadAppointments()
{
SchedulerApptInfo sched = new SchedulerApptInfo();
sched.ID = "1";
sched.Start = DateTime.Now;
sched.End = DateTime.Now.AddDays(1);
sched.Subject = "First Appt.";
SchedulerApptInfo sched2 = new SchedulerApptInfo();
sched2.ID = "2";
sched2.Start = DateTime.Now.AddDays(2);
sched2.End = DateTime.Now.AddDays(3);
sched2.Subject = "Second Appt.";
List<SchedulerApptInfo> schedList = new List<SchedulerApptInfo>();
schedList.Add(sched);
schedList.Add(sched2);
return schedList;
}
protected void RadAjaxManager1_CustomAjaxRequest(object sender, AjaxRequestEventArgs e)
{
if (e.Argument == "Inserting")
{
SchedulerApptInfo sched = new SchedulerApptInfo();
sched.ID = "3";
sched.Start = DateTime.Now.AddDays(4);
sched.End = DateTime.Now.AddDays(4.5);
sched.Subject = "Third Appt.";
List<SchedulerApptInfo> schedList = new List<SchedulerApptInfo>();
schedList.Add(sched);
this.RadScheduler1.DataSource = schedList;
RadScheduler1.DataKeyField = "id";
RadScheduler1.DataEndField = "end";
RadScheduler1.DataStartField = "start";
RadScheduler1.DataSubjectField = "subject";
RadScheduler1.DataBind();
RadScheduler1.Rebind();
}
}
}
And the design:
<asp:Content ID="Content1"
runat="server"
ContentPlaceHolderID="ContentPlaceHolder1">
<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
<script language="javascript" type="text/javascript">
function AppointmentInserting(sender, eventArgs)
{
var reqeuestString = "Inserting";
var ajaxManager = <%= this.Master.FindControl("RadAjaxManager1").ClientID %>;
ajaxManager.AjaxRequest(reqeuestString);
eventArgs.set_cancel(true);
}
function formatFullDate(date)
{
var year = padNumber(date.getUTCFullYear(), 4);
var month = padNumber(date.getUTCMonth() + 1, 2);
var day = padNumber(date.getUTCDate(), 2);
var hour = padNumber(date.getUTCHours(), 2);
var minute = padNumber(date.getUTCMinutes(), 2);
return year + month + day + hour + minute;
}
</script>
</telerik:RadScriptBlock>
<telerik:RadScheduler ID="RadScheduler1" runat="server" SelectedView="MonthView" OnClientAppointmentInserting="AppointmentInserting">
</telerik:RadScheduler>
</asp:Content>
What am I missing?