Hi,
I have this calendar, it displays it's events from database and vice versa.
But, when I tried to display this calendar from a sub-folder, the even cannot be displayed, I still can insert data into database but can't see it.
Those are the calendars.
Normal display of events (from out of sub-folder)
[
^]
Cannot display the event (from a sub-folder)
http://im21.gulfup.com/sd1L2.png[
^]
JsonResponse.ashx file
<%@ WebHandler Language="C#" Class="JsonResponse" %>
using System;
using System.Web;
using System.Collections;
using System.Collections.Generic;
using System.Web.SessionState;
public class JsonResponse : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
DateTime start = new DateTime(1970, 1, 1);
DateTime end = new DateTime(1970, 1, 1);
start = start.AddSeconds(double.Parse(context.Request.QueryString["start"]));
end = end.AddSeconds(double.Parse(context.Request.QueryString["end"]));
String result = String.Empty;
result += "[";
List<int> idList = new List<int>();
foreach (CalendarEvent cevent in EventDAO.getEvents(start, end))
{
result += convertCalendarEventIntoString(cevent);
idList.Add(cevent.id);
}
if (result.EndsWith(","))
{
result = result.Substring(0, result.Length - 1);
}
result += "]";
context.Session["idList"] = idList;
context.Response.Write(result);
}
private String convertCalendarEventIntoString(CalendarEvent cevent)
{
String allDay = "true";
if (ConvertToTimestamp(cevent.start).ToString().Equals(ConvertToTimestamp(cevent.end).ToString()))
{
if (cevent.start.Hour == 0 && cevent.start.Minute == 0 && cevent.start.Second == 0)
{
allDay = "true";
}
else
{
allDay = "false";
}
}
else
{
if (cevent.start.Hour == 0 && cevent.start.Minute == 0 && cevent.start.Second == 0
&& cevent.end.Hour == 0 && cevent.end.Minute == 0 && cevent.end.Second == 0)
{
allDay = "true";
}
else
{
allDay = "false";
}
}
return "{" +
"id: '" + cevent.id + "'," +
"title: '" + HttpContext.Current.Server.HtmlEncode(cevent.title) + "'," +
"start: " + ConvertToTimestamp(cevent.start).ToString() + "," +
"end: " + ConvertToTimestamp(cevent.end).ToString() + "," +
"allDay:" + allDay + "," +
"description: '" + HttpContext.Current.Server.HtmlEncode(cevent.description) + "'" +
"},";
}
public bool IsReusable
{
get
{
return false;
}
}
private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
return epoch;
}
}
App_Code/EventDAO.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
public class EventDAO
{
private static string connectionString = "Data Source=.;Initial Catalog=ELearning;User ID=sa;Password=123";
public static List<CalendarEvent> getEvents(DateTime start, DateTime end)
{
List<CalendarEvent> events = new List<CalendarEvent>();
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SELECT event_id, description, title, event_start, event_end FROM event where event_start>=@start AND event_end<=@end", con);
cmd.Parameters.AddWithValue("@start", start);
cmd.Parameters.AddWithValue("@end", end);
using (con)
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
CalendarEvent cevent = new CalendarEvent();
cevent.id = (int)reader["event_id"];
cevent.title = (string)reader["title"];
cevent.description = (string)reader["description"];
cevent.start = (DateTime)reader["event_start"];
cevent.end = (DateTime)reader["event_end"];
events.Add(cevent);
}
}
return events;
}
public static void updateEvent(int id, String title, String description)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("UPDATE event SET title=@title, description=@description WHERE event_id=@event_id", con);
cmd.Parameters.AddWithValue("@title", title);
cmd.Parameters.AddWithValue("@description", description);
cmd.Parameters.AddWithValue("@event_id", id);
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
}
public static void updateEventTime(int id, DateTime start, DateTime end)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("UPDATE event SET event_start=@event_start, event_end=@event_end WHERE event_id=@event_id", con);
cmd.Parameters.AddWithValue("@event_start", start);
cmd.Parameters.AddWithValue("@event_end", end);
cmd.Parameters.AddWithValue("@event_id", id);
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
}
public static void deleteEvent(int id)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("DELETE FROM event WHERE (event_id = @event_id)", con);
cmd.Parameters.AddWithValue("@event_id", id);
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
}
public static int addEvent(CalendarEvent cevent)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("INSERT INTO event(title, description, event_start, event_end) VALUES(@title, @description, @event_start, @event_end)", con);
cmd.Parameters.AddWithValue("@title", cevent.title);
cmd.Parameters.AddWithValue("@description", cevent.description);
cmd.Parameters.AddWithValue("@event_start", cevent.start);
cmd.Parameters.AddWithValue("@event_end", cevent.end);
int key = 0;
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
cmd = new SqlCommand("SELECT max(event_id) FROM event where title=@title AND description=@description AND event_start=@event_start AND event_end=@event_end", con);
cmd.Parameters.AddWithValue("@title", cevent.title);
cmd.Parameters.AddWithValue("@description", cevent.description);
cmd.Parameters.AddWithValue("@event_start", cevent.start);
cmd.Parameters.AddWithValue("@event_end", cevent.end);
key = (int)cmd.ExecuteScalar();
}
return key;
}
}
Default.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/BranchMasterPage2.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<link href="css/cupertino/jquery-ui-1.7.3.custom.css" rel="stylesheet" type="text/css" />
<link href="fullcalendar/fullcalendar.css" rel="stylesheet" type="text/css" />
<script src="jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="jquery/jquery-ui-1.7.3.custom.min.js" type="text/javascript"></script>
<script src="jquery/jquery.qtip-1.0.0-rc3.min.js" type="text/javascript"></script>
<script src="fullcalendar/fullcalendar.min.js" type="text/javascript"></script>
<script src="Scripts/calendarscript.js" type="text/javascript"></script>
<script src="jquery/jquery-ui-timepicker-addon-0.6.2.min.js" type="text/javascript"></script>
<style type='text/css'>
#calendar
{
width: 900px;
margin: 0 auto;
}
.ui-timepicker-div dl
{
text-align: left;
}
.ui-timepicker-div dl dt
{
height: 25px;
}
.ui-timepicker-div dl dd
{
margin: -25px 0 10px 65px;
}
.style1
{
width: 100%;
}
.alignRight
{
text-align:right;
padding-right:10px;
padding-bottom:10px;
}
.alignLeft
{
text-align:left;
padding-bottom:10px;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<div id="calendar">
</div>
<div runat="server" id="jsonDiv" />
<input type="hidden" id="hdClient" runat="server" />
</asp:Content>